一、浏览器的常用操作
"""
浏览器常用操作
"""
import time
from selenium import webdriver
driver = 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 time
from selenium import webdriver
driver = 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 time
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(2)
# type: WebElement
el_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 time
from selenium import webdriver
driver=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_ipt
el6=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_keys
el7.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 time
from selenium import webdriver
from 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 time
from selenium import webdriver
from selenium.webdriver import ActionChains
from 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()