一、浏览器的常用操作
"""浏览器常用操作"""import timefrom selenium import webdriverdriver = webdriver.Chrome()driver.get("http://www.baidu.com")# 浏览器最大化driver.maximize_window()time.sleep(2)# 最小化driver.minimize_window()time.sleep(2)# 指定窗口大小driver.set_window_size(1000,800)time.sleep(2)# # 浏览器后退# driver.back()# # 浏览器前进# driver.forward()# 浏览器标题及url 及 获取页面资源(断言)print(driver.title, driver.current_url)print(driver.page_source)# 截图(有错误时候基于当前的界面进行截图)driver.get_screenshot_as_file(r"C:\Users\11078\Desktop\baidu.png")# 浏览器的关闭driver.close()driver.quit()# unittest 设计用例 执行用例 自动关闭浏览器 teardown
二、元素定位
1、web自动化测试就是通过代码对网页进行测试,在对网页进行测试之前,必须掌握如何定位元素
2、元素定位的八大方法
1、基于id/name/class/tag_name定位
"""元素定位"""import timefrom selenium import webdriverdriver = webdriver.Chrome()driver.get("http://www.baidu.com")driver.find_element_by_id()driver.find_element_by_name()driver.find_element_by_class_name()driver.find_element_by_tag_name()el_xinwen = driver.find_element_by_link_text()el_element2 = driver.find_element_by_partial_link_text()# 六大方法:结合常用的属性name id class tag +对a标签元素的行为 find_element_by_partial_link_text/find_element_by_link_text# css定位# xpath定位# type: WebElement# 通过元素的id属性定位el_select = driver.find_element_by_id("kw")# 通过元素的name属性定位driver.find_element_by_name("wd")# 通过标签定位 一般情况下 不用这个driver.find_element_by_tag_name("input")# 通过链接文本定位el_xinwen = driver.find_element_by_link_text("新闻")el_xinwen.click()# 通过部分链接文本定位el_element2 = driver.find_element_by_partial_link_text("新")el_element2.click()# 通过类名定位driver.find_element_by_class_name("s_ipt")time.sleep(2)driver.quit()
2、基于a标签元素的链接文本定位
"""元素定位"""import timefrom selenium import webdriverdriver=webdriver.Chrome()driver.get("http://www.baidu.com")time.sleep(2)# type: WebElementel_select=driver.find_element_by_id("kw")# #通过元素的name属性定位el2=driver.find_element_by_name("wd")# # 通过标签定位 一般情况下 不用这个el4=driver.find_element_by_tag_name("input")# class属性定位el3=driver.find_element_by_class_name("s_ipt")# 通过链接文本定位el6=driver.find_element_by_link_text("新闻")el6.click()# # 通过部分链接文本定位el7=driver.find_element_by_partial_link_text("新")el7.click()# 返回元素列表[]els=driver.find_elements_by_partial_link_text("新")driver.find_elements_by_id()driver.find_elements_by_name()driver.find_elements_by_class_name()driver.find_elements_by_tag_name()
3、基于xpath定位
"""xpath定位find_element_by_xpath基于这个方法来实现"""# 通过绝对路径定位import timefrom selenium import webdriverdriver=webdriver.Chrome()driver.get("http://www.baidu.com")time.sleep(2)# driver.find_element_by_xpath("xpath语句如何来写")# 通过绝对路径定位(不要用) 不只是为了定位这个元素,考虑脚本的稳定 通过/从页面开始标签一直导航到目标标签el1=driver.find_element_by_xpath("/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input")# 通过相对路径定位 //开头 经常用到的方法el2=driver.find_element_by_xpath("//form/span/input")# 标签+索引=唯一定位目标标签el3=driver.find_element_by_xpath("//form/span[1]/input")# 唯一定位标签+属性el4=driver.find_element_by_xpath("//form[@id='form']/span[1]/input[@id='kw']")# 唯一定位标签+多个属性el5=driver.find_element_by_xpath("//form[@id='form'and @name='f']/span[1]/input[@id='kw']")# 标签+部分属性定位 s_iptel6=driver.find_element_by_xpath("//form/span[1]/input[substring(@class,3)='ipt']")el7=driver.find_element_by_xpath("//form/span[1]/input[contains(@id,'kw')]")el8=driver.find_element_by_xpath("//form/span[1]/input[starts‐with(@id,'k')]")el9=driver.find_element_by_xpath("//div[@id='s‐top‐left']/a[text()='新闻']")# 元素操作:输入 send_keysel7.send_keys("码尚教育")time.sleep(2)driver.close()# copyxpath 页面工具复制el10=driver.find_element_by_xpath('//*[@id="kw"]')# //标签[属性]# 通过文本定位el11=driver.find_element_by_xpath("//a[text()='新闻']")el11.click()# xpath定位 =属性+文本+索引 综合使用# xpath定位能否定位到
作业:
项目地址:
电商系统 - 登录
1、用户名及密码: admin admin123
2、基于xpath定位从登录到搜索功能涉及的所有元素
import timefrom selenium import webdriverfrom selenium.webdriver import ActionChains# 设置浏览器属性绕过淘宝的自动测试检测options = webdriver.ChromeOptions()options.add_argument("--disable-blink-features=AutomationControlled")driver = webdriver.Chrome(options=options)driver.get("https://www.taobao.com")time.sleep(2)# 登录dl_el = driver.find_element_by_xpath("//ul/li[2]/div/div/a[text()='亲,请登录']")# dl_el = driver.find_element_by_xpath("//ul/li[2]/div/div/a[contains(text(), '亲')]")dl_el.click()time.sleep(2)# # 切换窗口# wins = driver.window_handles# driver.switch_to.windows(wins[-1])# 输入账号密码登录el1 = driver.find_element_by_xpath("//form/div/div/input[@id='fm-login-id']")el1.send_keys("xxx")el2 = driver.find_element_by_xpath("//form/div/div/input[@id='fm-login-password']")el2.send_keys("xxx")# # 切换iframe# driver.switch_to.frame("baxia-dialog-content")# # 拖动滑块至最右边# el_hk = driver.find_element_by_xpath("//center/div/div/div/div/span")# action = ActionChains(driver)# action.move_to_element(el_hk)# action.click_and_hold(el_hk)# action.move_by_offset(300,0)# action.release()# action.perform()# 在console中输入window.navigator.webdriver,显示的值为true,则表示被检测到了,这样无论你怎么去滑滑块,都会显示出错。显示的值为undefined,则表示没有被检测到,此时就需要修改navigator的值driver.implicitly_wait(5)el3 = driver.find_element_by_xpath("//form/div/button[@type='submit']")el3.click()time.sleep(2)# 搜索笔记本电脑el4 = driver.find_element_by_xpath("//form/div/input[@id='q']")el4.send_keys("笔记本电脑")el5 = driver.find_element_by_xpath("//form/div/button[@type='submit']")el5.click()time.sleep(2)driver.close()
import timefrom selenium import webdriverfrom selenium.webdriver import ActionChainsfrom selenium.webdriver.common.by import By# 设置浏览器属性绕过淘宝的自动测试检测options = webdriver.ChromeOptions()options.add_argument("--disable-blink-features=AutomationControlled")driver = webdriver.Chrome(options=options)driver.get("https://www.taobao.com")time.sleep(2)# 登录# dl_el = driver.find_element(By.XPATH, "//ul/li[2]/div/div/a[text()='亲,请登录']")dl_el = driver.find_element(By.XPATH, "//ul/li[2]/div/div/a[contains(text(),'亲')]")dl_el.click()time.sleep(2)# # 切换窗口# wins = driver.window_handles# driver.switch_to.windows(wins[-1])# 输入账号密码登录el1 = driver.find_element(By.XPATH, "//form/div/div/input[@id='fm-login-id']")el1.send_keys("xxx")el2 = driver.find_element(By.XPATH, "//form/div/div/input[@id='fm-login-password']")el2.send_keys("xxx")# # 切换iframe# driver.switch_to.frame("baxia-dialog-content")# # 拖动滑块至最右边# el_hk = driver.find_element(By.XPATH, "//center/div/div/div/div/span']")# action = ActionChains(driver)# action.move_to_element(el_hk)# action.click_and_hold(el_hk)# action.move_by_offset(300,0)# action.release()# action.perform()# 在console中输入window.navigator.webdriver,显示的值为true,则表示被检测到了,这样无论你怎么去滑滑块,都会显示出错。显示的值为undefined,则表示没有被检测到,此时就需要修改navigator的值driver.implicitly_wait(5)el3 = driver.find_element(By.XPATH, "//form/div/button[@type='submit']")el3.click()time.sleep(2)# 搜索笔记本电脑el4 = driver.find_element(By.XPATH, "//form/div/input[@id='q']")el4.send_keys("笔记本电脑")el5 = driver.find_element(By.XPATH, "//form/div/button[@type='submit']")el5.click()time.sleep(2)driver.close()
