一、浏览器的常用操作

  1. """
  2. 浏览器常用操作
  3. """
  4. import time
  5. from selenium import webdriver
  6. driver = webdriver.Chrome()
  7. driver.get("http://www.baidu.com")
  8. # 浏览器最大化
  9. driver.maximize_window()
  10. time.sleep(2)
  11. # 最小化
  12. driver.minimize_window()
  13. time.sleep(2)
  14. # 指定窗口大小
  15. driver.set_window_size(1000,800)
  16. time.sleep(2)
  17. # # 浏览器后退
  18. # driver.back()
  19. # # 浏览器前进
  20. # driver.forward()
  21. # 浏览器标题及url 及 获取页面资源(断言)
  22. print(driver.title, driver.current_url)
  23. print(driver.page_source)
  24. # 截图(有错误时候基于当前的界面进行截图)
  25. driver.get_screenshot_as_file(r"C:\Users\11078\Desktop\baidu.png")
  26. # 浏览器的关闭
  27. driver.close()
  28. driver.quit()
  29. # unittest 设计用例 执行用例 自动关闭浏览器 teardown

二、元素定位

1、web自动化测试就是通过代码对网页进行测试,在对网页进行测试之前,必须掌握如何定位元素
2、元素定位的八大方法

1、基于id/name/class/tag_name定位

  1. """
  2. 元素定位
  3. """
  4. import time
  5. from selenium import webdriver
  6. driver = webdriver.Chrome()
  7. driver.get("http://www.baidu.com")
  8. driver.find_element_by_id()
  9. driver.find_element_by_name()
  10. driver.find_element_by_class_name()
  11. driver.find_element_by_tag_name()
  12. el_xinwen = driver.find_element_by_link_text()
  13. el_element2 = driver.find_element_by_partial_link_text()
  14. # 六大方法:结合常用的属性name id class tag +对a标签元素的行为 find_element_by_partial_link_text/find_element_by_link_text
  15. # css定位
  16. # xpath定位
  17. # type: WebElement
  18. # 通过元素的id属性定位
  19. el_select = driver.find_element_by_id("kw")
  20. # 通过元素的name属性定位
  21. driver.find_element_by_name("wd")
  22. # 通过标签定位 一般情况下 不用这个
  23. driver.find_element_by_tag_name("input")
  24. # 通过链接文本定位
  25. el_xinwen = driver.find_element_by_link_text("新闻")
  26. el_xinwen.click()
  27. # 通过部分链接文本定位
  28. el_element2 = driver.find_element_by_partial_link_text("新")
  29. el_element2.click()
  30. # 通过类名定位
  31. driver.find_element_by_class_name("s_ipt")
  32. time.sleep(2)
  33. driver.quit()

2、基于a标签元素的链接文本定位

  1. """
  2. 元素定位
  3. """
  4. import time
  5. from selenium import webdriver
  6. driver=webdriver.Chrome()
  7. driver.get("http://www.baidu.com")
  8. time.sleep(2)
  9. # type: WebElement
  10. el_select=driver.find_element_by_id("kw")
  11. # #通过元素的name属性定位
  12. el2=driver.find_element_by_name("wd")
  13. # # 通过标签定位 一般情况下 不用这个
  14. el4=driver.find_element_by_tag_name("input")
  15. # class属性定位
  16. el3=driver.find_element_by_class_name("s_ipt")
  17. # 通过链接文本定位
  18. el6=driver.find_element_by_link_text("新闻")
  19. el6.click()
  20. # # 通过部分链接文本定位
  21. el7=driver.find_element_by_partial_link_text("新")
  22. el7.click()
  23. # 返回元素列表[]
  24. els=driver.find_elements_by_partial_link_text("新")
  25. driver.find_elements_by_id()
  26. driver.find_elements_by_name()
  27. driver.find_elements_by_class_name()
  28. driver.find_elements_by_tag_name()

3、基于xpath定位

  1. """
  2. xpath定位
  3. find_element_by_xpath基于这个方法来实现
  4. """
  5. # 通过绝对路径定位
  6. import time
  7. from selenium import webdriver
  8. driver=webdriver.Chrome()
  9. driver.get("http://www.baidu.com")
  10. time.sleep(2)
  11. # driver.find_element_by_xpath("xpath语句如何来写")
  12. # 通过绝对路径定位(不要用) 不只是为了定位这个元素,考虑脚本的稳定 通过/从页面开始标签一直导航到目标标签
  13. el1=driver.find_element_by_xpath("/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input")
  14. # 通过相对路径定位 //开头 经常用到的方法
  15. el2=driver.find_element_by_xpath("//form/span/input")
  16. # 标签+索引=唯一定位目标标签
  17. el3=driver.find_element_by_xpath("//form/span[1]/input")
  18. # 唯一定位标签+属性
  19. el4=driver.find_element_by_xpath("//form[@id='form']/span[1]/input[@id='kw']")
  20. # 唯一定位标签+多个属性
  21. el5=driver.find_element_by_xpath("//form[@id='form'and @name='f']/span[1]/input[@id='kw']")
  22. # 标签+部分属性定位 s_ipt
  23. el6=driver.find_element_by_xpath("//form/span[1]/input[substring(@class,3)='ipt']")
  24. el7=driver.find_element_by_xpath("//form/span[1]/input[contains(@id,'kw')]")
  25. el8=driver.find_element_by_xpath("//form/span[1]/input[starts‐with(@id,'k')]")
  26. el9=driver.find_element_by_xpath("//div[@id='s‐top‐left']/a[text()='新闻']")
  27. # 元素操作:输入 send_keys
  28. el7.send_keys("码尚教育")
  29. time.sleep(2)
  30. driver.close()
  31. # copyxpath 页面工具复制
  32. el10=driver.find_element_by_xpath('//*[@id="kw"]')
  33. # //标签[属性]
  34. # 通过文本定位
  35. el11=driver.find_element_by_xpath("//a[text()='新闻']")
  36. el11.click()
  37. # xpath定位 =属性+文本+索引 综合使用
  38. # xpath定位能否定位到

作业:

项目地址:
电商系统 - 登录
1、用户名及密码: admin admin123
2、基于xpath定位从登录到搜索功能涉及的所有元素

  1. import time
  2. from selenium import webdriver
  3. from selenium.webdriver import ActionChains
  4. # 设置浏览器属性绕过淘宝的自动测试检测
  5. options = webdriver.ChromeOptions()
  6. options.add_argument("--disable-blink-features=AutomationControlled")
  7. driver = webdriver.Chrome(options=options)
  8. driver.get("https://www.taobao.com")
  9. time.sleep(2)
  10. # 登录
  11. dl_el = driver.find_element_by_xpath("//ul/li[2]/div/div/a[text()='亲,请登录']")
  12. # dl_el = driver.find_element_by_xpath("//ul/li[2]/div/div/a[contains(text(), '亲')]")
  13. dl_el.click()
  14. time.sleep(2)
  15. # # 切换窗口
  16. # wins = driver.window_handles
  17. # driver.switch_to.windows(wins[-1])
  18. # 输入账号密码登录
  19. el1 = driver.find_element_by_xpath("//form/div/div/input[@id='fm-login-id']")
  20. el1.send_keys("xxx")
  21. el2 = driver.find_element_by_xpath("//form/div/div/input[@id='fm-login-password']")
  22. el2.send_keys("xxx")
  23. # # 切换iframe
  24. # driver.switch_to.frame("baxia-dialog-content")
  25. # # 拖动滑块至最右边
  26. # el_hk = driver.find_element_by_xpath("//center/div/div/div/div/span")
  27. # action = ActionChains(driver)
  28. # action.move_to_element(el_hk)
  29. # action.click_and_hold(el_hk)
  30. # action.move_by_offset(300,0)
  31. # action.release()
  32. # action.perform()
  33. # 在console中输入window.navigator.webdriver,显示的值为true,则表示被检测到了,这样无论你怎么去滑滑块,都会显示出错。显示的值为undefined,则表示没有被检测到,此时就需要修改navigator的值
  34. driver.implicitly_wait(5)
  35. el3 = driver.find_element_by_xpath("//form/div/button[@type='submit']")
  36. el3.click()
  37. time.sleep(2)
  38. # 搜索笔记本电脑
  39. el4 = driver.find_element_by_xpath("//form/div/input[@id='q']")
  40. el4.send_keys("笔记本电脑")
  41. el5 = driver.find_element_by_xpath("//form/div/button[@type='submit']")
  42. el5.click()
  43. time.sleep(2)
  44. driver.close()
  1. import time
  2. from selenium import webdriver
  3. from selenium.webdriver import ActionChains
  4. from selenium.webdriver.common.by import By
  5. # 设置浏览器属性绕过淘宝的自动测试检测
  6. options = webdriver.ChromeOptions()
  7. options.add_argument("--disable-blink-features=AutomationControlled")
  8. driver = webdriver.Chrome(options=options)
  9. driver.get("https://www.taobao.com")
  10. time.sleep(2)
  11. # 登录
  12. # dl_el = driver.find_element(By.XPATH, "//ul/li[2]/div/div/a[text()='亲,请登录']")
  13. dl_el = driver.find_element(By.XPATH, "//ul/li[2]/div/div/a[contains(text(),'亲')]")
  14. dl_el.click()
  15. time.sleep(2)
  16. # # 切换窗口
  17. # wins = driver.window_handles
  18. # driver.switch_to.windows(wins[-1])
  19. # 输入账号密码登录
  20. el1 = driver.find_element(By.XPATH, "//form/div/div/input[@id='fm-login-id']")
  21. el1.send_keys("xxx")
  22. el2 = driver.find_element(By.XPATH, "//form/div/div/input[@id='fm-login-password']")
  23. el2.send_keys("xxx")
  24. # # 切换iframe
  25. # driver.switch_to.frame("baxia-dialog-content")
  26. # # 拖动滑块至最右边
  27. # el_hk = driver.find_element(By.XPATH, "//center/div/div/div/div/span']")
  28. # action = ActionChains(driver)
  29. # action.move_to_element(el_hk)
  30. # action.click_and_hold(el_hk)
  31. # action.move_by_offset(300,0)
  32. # action.release()
  33. # action.perform()
  34. # 在console中输入window.navigator.webdriver,显示的值为true,则表示被检测到了,这样无论你怎么去滑滑块,都会显示出错。显示的值为undefined,则表示没有被检测到,此时就需要修改navigator的值
  35. driver.implicitly_wait(5)
  36. el3 = driver.find_element(By.XPATH, "//form/div/button[@type='submit']")
  37. el3.click()
  38. time.sleep(2)
  39. # 搜索笔记本电脑
  40. el4 = driver.find_element(By.XPATH, "//form/div/input[@id='q']")
  41. el4.send_keys("笔记本电脑")
  42. el5 = driver.find_element(By.XPATH, "//form/div/button[@type='submit']")
  43. el5.click()
  44. time.sleep(2)
  45. driver.close()