Selenium是一个web自动化测试的工具,在使用之前先在对应的项目添加工具包噢.
本文章主要简单的介绍了selenium对于自动化测试的使用
目录
[class name定位](#class name定位)
[link text定位](#link text定位)
添加浏览器驱动
python
from selenium import webdriver #导包
browser = webdriver.Edge() #得到浏览器驱动
get函数来到对应网站
python
browser.get("https://www.baidu.com/index.htm")
驱动的定位
通俗的说,页面通过句柄进行定位,句柄是页面的唯一标识
可以通过
driver.window_handles
来获取所有的句柄,也可以通过下面的方法获取最新页面的句柄
python
driver.switch_to.window(driver.current_window_handle) #获取当前页面的句柄,并将驱动重新定位到最新的页面
在获取后,通过switch_to.window方法重新定位浏览器驱动,这样才能进行后续的操作.
元素定位
首先要进行导包
python
from selenium.webdriver.common.by import By
定位元素的方法有很多:
-
- id定位(通常是唯一)
- name定位(允许重复,定位到第一个)
- tag name(标签名,允许重复定位到第一个)
- class name定位()
- CSS定位
- XPath定位
- link text定位
关键是"定位",当然是要定位到一个唯一的地址,当以上的id,name,class name在页面上不是唯一的时候,定位都会失败.
(可以在浏览器的开发者模式F12中,按下ctrl + f.输入要定位的元素的id或classname进行查看是否唯一)
图中显示有72个元素包含有container
id定位
通过元素的id进行定位
python
browser.find_element(By.ID, "kw")
name,tag name,class name都是与id定位一样的,但都是在唯一的前提下才能进行使用.
class name定位
class我们可以只截取其一部分进行定位,如果一个元素的class为hello world
那么我们可以只把hello或world放上语句进行定位
CSS定位
在F12下,找到对应的元素.右键
选择slector,得到当前元素的CSS
python
browser.find_element(By.CSS_SELECTOR, "#kw")
XPath定位
与CSS类似的
python
browser.find_element(By.XPATH, "//*[@id='kw']")
link text定位
像以上的文字链接,就可以使用这种方式(页面唯一时)
python
browser.find_element(By.LINK_TEXT,"hao123").click()
定位一组元素
使用find_elements
可以找到多个元素,并以集合的形式存储
python
saveH3 = driver.find_elements(By.CLASS_NAME, "t") # 获取所有的t
for a in saveH3: # 遍历t中的a,获取文本并打印
data = a.find_element(By.TAG_NAME,"a").text
print(data)
层级定位
在定位复杂一点的元素时,可以先定位到其父级元素,并再次定位进行寻找
python
driver.find_element(By.CLASS_NAME, "t").find_element(By.TAG_NAME,"a")
操作测试对象
定位完元素之后当然是要对其进行操作啦.
在webdriver中常用的操作对象有:
- click 点击
- send_keys 在对象上模拟按钮输入
- clear 清楚对象输入的文本
- submit 提交
- text 获取元素的文本内容
等待
在selenium中,等待分为隐式等待,显示等待与强制等待
强制等待
time包中的sleep-单位为秒(s)
time.sleep(5) #页面强制等待5s
显式等待
对特定的元素进行等待
python
#显式等待,直到元素被加载出来.条件是10s内,每0.5秒进行尝试点击.如果元素加载出来了就停止等待
#超过10s找不到就抛异常
tmp = WebDriverWait(browser,10,0.5).until(EC.presence_of_element_located((By.LINK_TEXT,'我的世界Minecraft中国版官方网站------你想玩的,这里都有')))
tmp.click()
隐式等待
隐式等待(设置一次,全局生效)
会对所有将要被操作元素进行等待
在下一个被操作的元素没有加载出来之前会进行等待,等待的时长为20,单位为秒
python
driver.implicitly_wait(20)
鼠标点击与键盘的输入
send_keys()
在输入框中输入文本
click()
对元素进行点击
python
from selenium.webdriver.common.keys import Keys
driver.find_element(By.ID, "kw").send_keys("B站")
driver.find_element(By.ID, "kw").send_keys(Keys.ENTER)#对输入框的内容进行键盘上的Enter操作
submit()
提交表单,对type为submit类型的元素.触发表单的提交
text
获取元素的文本信息
python
driver.find_element(By.TAG_NAME,"a").text
打印信息
页面的title,URL...都可以获取出来
但是驱动的title和URL等属性都是当前驱动所在页面的属性,并不是浏览器上最新页面的属性
例如:
在百度搜索结果页面,点开了一个超链接.新建了页面A
但此时浏览器驱动还是在百度搜索结果页面上,此时直接去搜索页面A的元素是会报错的
而通过driver.title获取页面的标题,得到的也只是百度搜索结果页面的标题,并不是A的标题
浏览器的操作
对页面的控制,
浏览器最大化
python
driver.maximize_window()
将页面调整至最大化
浏览器的宽与高
python
driver.set_window_size(#{宽},#{高})
浏览器的前进与后退
python
driver.forward() # 前进 driver.back # 后退
键盘按键
模拟键盘操作,首先要导入keys包
python
from selenium.webdriver.common.keys import Keys # 键盘按钮包
通过键盘的输入方法send_keys来进行下面的操作
常用按键方法
python
send_keys(Keys.TAB) # 按下tab
send_keys(Keys.ENTER) # 按下回车
send_keys(Keys.SPACE) # 按下空格
send_keys(Keys.ESCAPR) # 按下回车键
键盘组合键用法
注意组合键后面的英文字母为小写
python
send_keys(Keys.CONTROL,'a') # 全选
ctrl + a send_keys(Keys.CONTROL,'c')
send_keys(Keys.CONTROL,'x')
send_keys(Keys.CONTROL,'v')
鼠标事件
鼠标事件也要导入包
python
from selenium.webdriver.common.action_chains import ActionChains
ActionChains类 (执行链)中的方法有
- context_click(#{element}) # 右键
- double_click(#{element}) # 双击
- drage_and_drop(#{element},#{target}) # 拖动元素至目标 target也是元素
- move_to_element(#{element}) # 指针移动到元素
alert,conirm,prompt的处理
这是关于弹窗的处理,首先来说明一下三个弹窗
- alert,警告类弹窗.只有确认键
- confirm,询问类弹窗,询问是否继续某些操作.有确认与取消键
- prompt,消息类弹窗,含有输入框,可能会要输入内容,有确认与取消键
python
alter = driver.switch_to.alert # 将驱动定位到当前弹窗:alert/confirm/prompt上
alter.text # 获取当前弹窗的文本
alter.accept() # 按下当前弹窗的确认键
alter.dismiss() # 按下当前弹窗的取消键-如果有的话
alter.send_keys("要输入的内容") # 在弹窗的输入框中输入内容-如果有的话
上传文件的操作
找到type为file的input标签,使用send_keys方法添加本地文件的路径
selenium简单使用流程
python
driver = webdriver.Edge()
driver.implicitly_wait(30)
driver.get("https://www.baidu.com/index.htm")
driver.maximize_window() # 设置页面最大化
driver.find_element(By.ID, "kw").send_keys("蜡笔小新")
driver.find_element(By.ID, "kw").send_keys(Keys.ENTER)
driver.switch_to.window(driver.current_window_handle)
saveH3 = driver.find_elements(By.CLASS_NAME, "t") # 获取所有的t
for a in saveH3: # 遍历t中的a,获取文本并打印
data = a.find_element(By.TAG_NAME, "a").text
print(data)
alter = driver.switch_to.alert # 将驱动定位到当前弹窗:alert/confirm/prompt上
alter.text # 获取当前弹窗的文本
alter.accept() # 按下当前弹窗的确认键
alter.dismiss() # 按下当前弹窗的取消键-如果有的话
alter.send_keys("要输入的内容") # 在弹窗的输入框中输入内容-如果有的话