自动化测试selenium
文章目录
一、测试是否可以正常运行
1、简单测试
- 新建一个项目。
- 建立一个python包。
- 新建一个py文件。
- 首先输入from selenium 等待下载selenium,如果不下载,就会出现selenium下有红线的现象。
# 导包
from selenium import webdriver
import time
# 获取 Chrome 浏览器的驱动
driver = webdriver.Chrome()
# 在 Chrome 浏览器中打开百度页面
driver.get("https://www.baidu.com/")
# 浏览器最大化
driver.maximize_window()
# 定位百度搜索输入框,然后输入想要查询的信息
driver.find_element_by_css_selector("#kw").send_keys("我在他乡挺好的")
# 定位搜索按钮,然后点击
driver.find_element_by_css_selector("#su").click()
# 页面等待时间 8s
time.sleep(8)
# 关闭浏览器
driver.quit()
- 选择快键键 ctrl + shift + f10 就会运行。
二、元素定位
- 要想操作一个对象,首先应该识别这个对象。
- 定位方式有很多,但是要保证这种方式存在,且能够唯一的定位到这个元素。
1、用 id 来定位 优先选择 ※
- 首先在 Chrome 浏览器上把鼠标放到搜索框,鼠标右击选择开发者模式(快捷键:f12),查看对应 id 名。
driver.find_element_by_id("kw").send_keys("肖战")
driver.find_element_by_id("su").click()
2、用 name 来定位
- 在开发者模式中找到对应的name,
driver.find_element_by_name("wd").send_keys("肖战演员")
driver.find_element_by_id("su").click()
3、用 class name 来定位
- class name不唯一,容易出错。
driver.find_element_by_class_name("s_ipt").send_keys("xiaozhan")
driver.find_element_by_class_name("bg s_btn").click()
4、用 link text (链接)定位
- 有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过link。
driver.find_element_by_link_text("hao123").click()
5、用 partial link text (链接文字)定位
- 通过部分链接定位,可以只用链接的一部分文字进行匹配。
driver.find_element_by_partial_link_text("新").click()
6、用 tag name (标签)定位
driver.find_element_by_tag_name("input").send_keys("陈情令")
driver.find_element_by_tag_name("input").click()
- 失败,ElementNotInteractableException: element not interactable 无法交互。input 标签元素太多,无法定位。
7、用 XPath 定位 ※
- XPath 是一种在XML 文档中定位元素的语言。因为HTML 可以看做XML 的一种实现,所以selenium 用户可是使用这种强大语言在web 应用中定位元素。
- 用 id 来定位 优先选择。如果没有,使用 xpath 也可以唯一定位。
- 熟悉前端页面也可以自己写 :// 路径, * 所有的寻找, @id 寻找 id。
# 在粘贴中,注意“ ” 内是' ' ,需要修改
driver.find_element_by_xpath("//*[@id='kw']").send_keys("陈情令")
driver.find_element_by_xpath("//*[@id='su']").click()
8、用 css selector 定位
- 当有唯一 id 用 # ,有唯一 class 用 . 。
driver.find_element_by_css_selector("#kw").send_keys("cql")
driver.find_element_by_css_selector("#su").click()
整体代码
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
# 浏览器最大化
driver.maximize_window()
# 用 id 来定位 优先选择 如果没有,使用 xpath 也可以唯一定位
# driver.find_element_by_id("kw").send_keys("肖战")
# driver.find_element_by_id("su").click()
# 用 name 来定位
# driver.find_element_by_name("wd").send_keys("肖战演员")
# driver.find_element_by_id("su").click()
# 用 class name 来定位 不唯一,出错
# driver.find_element_by_class_name("s_ipt").send_keys("xiaozhan")
# driver.find_element_by_class_name("bg s_btn").click()
# link text
# driver.find_element_by_link_text("hao123").click()
# 链接的文本内容 partial link text
# driver.find_element_by_partial_link_text("新").click()
# tag name 标签 ElementNotInteractableException: element not interactable 无法交互 input标签元素太多,无法定位
# driver.find_element_by_tag_name("input").send_keys("陈情令")
# driver.find_element_by_tag_name("input").click()
# xPath //路径 *所有的寻找 @id寻找id
# driver.find_element_by_xpath("//*[@id='kw']").send_keys("陈情令")
# driver.find_element_by_xpath("//*[@id='su']").click()
# css id用#号 如果有唯一class是.号
driver.find_element_by_css_selector("#kw").send_keys("cql")
driver.find_element_by_css_selector("#su").click()
time.sleep(6)
driver.quit()
三、操作测试对象
1、click 点击对象
- click() 用于点击一个按钮。
2、send_keys 在对象上模拟按键输入
- send_keys(“xx”) 用于在一个输入框里输入xx 内容。
3、clear 清除对象的内容(如果可以的话)
- clear() 用于清除输入框的内容。
- 比如百度输入框里默认有个“请输入关键字”的信息。
- 比如我们的登陆框一般默认会有“账号”“密码”这样的默认信息,clear 可以帮助我们清除这些信息。
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
driver.find_element_by_css_selector("#kw").send_keys("我在他乡挺好的")
driver.find_element_by_css_selector("#su").click()
time.sleep(6)
# 清除信息 先定位
driver.find_element_by_id("kw").clear()
time.sleep(5)
# 在搜索其他信息
driver.find_element_by_id("kw").send_keys("肖战")
driver.find_element_by_id("su").click()
time.sleep(6)
driver.quit()
4、submit 提交表单
- 把“百度一下”的操作从click 换成submit 可以达到相同的效果(在该页面唯一,与 click 作用一致)。
driver.find_element_by_id("kw").send_keys("肖战")
driver.find_element_by_id("su").submit()
5、text 用于获取元素的文本信息
- text 用于获取元素的文本信息。
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
# 获取元素内容
text = driver.find_element_by_id("bottom_layer").text
print(text)
driver.quit()
四、添加等待
- 添加休眠非常简单,我们需要引入time 包,就可以在脚本中自由的添加休眠时间。
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
driver.find_element_by_id("kw").send_keys("肖战")
driver.find_element_by_id("su").click()
# 找到肖战,跳转到肖战的百度百科界面
driver.find_element_by_link_text("百度百科").click()
# 没有找到,在资源没加载出来,就去寻找资源,导致没有变化
time.sleep(6)
# close 关闭浏览器 quit 不仅关闭浏览器,还可以清除缓存垃圾
driver.quit()
所以在这时就需要添加一个等待。
1、固定等待 time.sleep()
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
driver.find_element_by_id("kw").send_keys("肖战")
driver.find_element_by_id("su").click()
# 加一个等待
# 固定等待,让页面 等待 规定的时间 10s ,在 10s后在查找肖战的百度百科,
time.sleep(10)
driver.find_element_by_link_text("百度百科").click()
time.sleep(6)
driver.quit()
2、智能等待 implicitly_wait()
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
driver.find_element_by_id("kw").send_keys("肖战")
driver.find_element_by_id("su").click()
# 加一个等待
# 智能等待 ,当页面加载出来后就直接跳转, 下面的意思是最多等10秒 但是在10s后没有加载出来后就会报错
driver.implicitly_wait(10)
driver.find_element_by_link_text("百度百科").click()
time.sleep(6)
driver.quit()