[Python]Selenium-自动化测试

Selenium是一个web自动化测试的工具,在使用之前先在对应的项目添加工具包噢.

本文章主要简单的介绍了selenium对于自动化测试的使用

目录

添加浏览器驱动

get函数来到对应网站

驱动的定位

元素定位

id定位

[class name定位](#class name定位)

CSS定位

XPath定位

[link text定位](#link text定位)

定位一组元素

层级定位

操作测试对象

等待

强制等待

显式等待

隐式等待

鼠标点击与键盘的输入

send_keys()

click()

submit()

text

打印信息

浏览器的操作

浏览器最大化

浏览器的宽与高

浏览器的前进与后退

键盘按键

常用按键方法

键盘组合键用法

鼠标事件

alert,conirm,prompt的处理

上传文件的操作

selenium简单使用流程


添加浏览器驱动

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']")

像以上的文字链接,就可以使用这种方式(页面唯一时)

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("要输入的内容")  # 在弹窗的输入框中输入内容-如果有的话
相关推荐
浊酒南街1 小时前
决策树python实现代码1
python·算法·决策树
FreedomLeo12 小时前
Python机器学习笔记(十三、k均值聚类)
python·机器学习·kmeans·聚类
星光樱梦2 小时前
32. 线程、进程与协程
python
阿正的梦工坊2 小时前
深入理解 PyTorch 的 view() 函数:以多头注意力机制(Multi-Head Attention)为例 (中英双语)
人工智能·pytorch·python
西猫雷婶2 小时前
python学opencv|读取图像(十九)使用cv2.rectangle()绘制矩形
开发语言·python·opencv
liuxin334455663 小时前
学籍管理系统:实现教育管理现代化
java·开发语言·前端·数据库·安全
海绵波波1073 小时前
flask后端开发(10):问答平台项目结构搭建
后端·python·flask
码农W3 小时前
QT--静态插件、动态插件
开发语言·qt
ke_wu3 小时前
结构型设计模式
开发语言·设计模式·组合模式·简单工厂模式·工厂方法模式·抽象工厂模式·装饰器模式
赵谨言3 小时前
基于python网络爬虫的搜索引擎设计
爬虫·python·搜索引擎