当前位置:网站首页>软件测试之WEB自动化
软件测试之WEB自动化
2022-08-02 14:15:00 【keer丶】
1.WEB自动化环境配置
1.1webdriver配置
以chrome浏览器为例,从https://registry.npmmirror.com/binary.html?path=chromedriver中下载对应chrome浏览器版本号的chromedriver,解压将文件放到自己指定的位置,在环境变量中配置此位置,不能有中文特殊字符。
1.2selenium安装
pycharm 安装 selenium
pip install selenium
pycharm 项目文件中引用 selenium
from selenium import webdriver
2.WEB自动化相关API
2.1浏览器操作API
- 打开页面:driver.get("url")
- 关闭:driver.quit()结束进程 driver.close()仅关闭当前窗口
- 设置窗口大小:driver.set_window_size(500,500)
- 窗口最大化:driver.maximize_window()
- 窗口最小化:driver.minimize_window()
- 刷新页面:driver.refresh()
- 获取页面标题:driver.title
- 获取当前页面url:driver.current_url
- 获取当前页面截图:driver.get_screenshot_as_file("a.png") 括号内为保存截图的地址+文件名
相关代码:
from selenium import webdriver
driver = webdriver.Chrome() #实例化Chrome对象
driver.get("https://www.baidu.com") #打开百度
driver.set_window_size(500,500) #设置窗口大小
driver.minimize_window() #最小化窗口
driver.maximize_window() #最大化窗口
driver.refresh() #刷新页面
title = driver.title
url = driver.current_url
print(title,url)
打印结果:
2.2常用的八种定位方式
- id
- name
- class name
- tag name
- link text <a>标签
- partial link text <a>标签
- xpath(通用,可以在chrome中用$x调试) $x("//div[@class='header-top']")
- css selector(通用,可以在chrome中用$$调试)
代码参考:
from selenium import webdriver
driver = webdriver.Chrome() #实例化Chrome对象
driver.get("https://www.baidu.com") #打开百度
ele1 = driver.find_element("xpath","//input[@id='kw']")
ele2 = driver.find_element("id","kw")
print(ele1==ele2) #True,上边两种方式等价
Xpath:指的是XML path
绝对路径表示法:指从/目录开始的路径表示法,必须根据实际路径逐级表示
相对路径表示法:指从目标对象所在位置根据其父对象进行路径表示的方法
ele1 = driver.find_element("xpath","//input[@id='kw'][@name='xx']/div")
find_element与find_elements
find_element根据指定的方式定位元素,仅返回找到的第一个元素,如果没有元素符合则返回none
find_elements根据指定的方式定位元素,以列表的形式返回找到的全部元素,如果没有符合的元素则返回空列表,可以通过下标去选择列表中的元素
2.3元素操作API
clear():清楚文本框中的文字
send_keys():向文本域或文件上传按钮发送文字内容
click():点击按钮
text:获取节点上的文字信息
get_attribute(name):获取元素的属性信息
is_displayed():判断元素是否显示出来
2.4三种等待方式
- 强制/固定等待
优势:用法非常简单,一般用于项目调试,或者用于等待元素状态、文本发生改变。
劣势:等待时间固定,如果脚本中大量使用会导致脚本运行效率低。
代码参考:
import time
time.sleep(2) #单位秒
- 隐式等待/全局等待
设置一次后(隐式等待只需设置一次),全局有效,在元素没有出现时最多只等待指定的时间,但如果在等待时间内,什么时候元素出现什么时候停止等待。隐式等待只能在元素不存在DOM中时能生效,否则不会产生任何等待效果。
代码参考:
driver.implicitly_wait(5) #单位为秒
- 显示等待
可针对每一个元素进行单独设置,等待条件更加灵活,
注意:如果显式等待和隐式等待同时设置,以最长等待时间为准。
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("http://shop-xo.hctestedu.com/")
WebDriverWait(driver,10).until(EC.presence_of_element_located(("id","search-input"))) #这里参数是一个元组
driver.find_element("id","search-input").send_keys('你好')
常见EC方法:
EC.title_is(strtitle):判断当前页面的title是否精确等于预期
EC.title_contains(strtitle):判断当前页面的title是否包含指定字符串
EC.presence_of_element_located(locator):判断某个元素是否被加到了dom树中,并不代表该元素一定可见
EC.visibility_of_element_located(locator):判断某个元素是否可见,可见代表元素非隐藏,并且高和宽都不等于0
EC.invisibility_of_element_located(locator):判断某个元素是否不可见
EC.element_to_be_clickable(locator):判断某个元素是否可见并且时enable
EC.text_to_be_present_in_element(locator):判断某个元素中的text是否包含了预期的字符串
driver.get('https://mail.163.com/')
WebDriverWait(driver,5).until(EC.text_to_be_present_in_element(('id','msg'),'等待出现的内容'))
边栏推荐
猜你喜欢
JCMsuite应用:四分之一波片
audio console无法连接到RPC服务
The relationship between base classes and derived classes [inheritance] / polymorphism and virtual functions / [inheritance and polymorphism] abstract classes and simple factories
嵌入式学习硬件篇------初识ARM
Technical Selection of Message Queuing
OpenPose 基本理念
MySQL协议长什么样子
EastWave应用:光场与石墨烯和特异介质相互作用的研究
【软件测试】基础篇
【Solidity智能合约基础】-- 基础运算与底层位运算
随机推荐
内存和硬盘、磁盘的区别
Litestar 4D – WebCatalog 7:全自动数据管理
【软件测试】用例篇
【线程安全】用户级,内核级,组合级线程|线程同步的处理(条件变量)|strtok_r(可冲入函数)
Oauth2.0 安全性(以微信授权登陆为例)
项目管理模块-项目权限功能开发
使用三个线程,按顺序打印X,Y,Z,连续打印10次
为什么Volatile能保证双重检查锁的线程安全
Oauth2.0 Supplement
change the available bandwidth of tcp flow dynamically in mininet
Oauth2.0 自定义响应值以及异常处理
EastWave应用:光场与石墨烯和特异介质相互作用的研究
unity 和C# 一些官方优化资料
OpenPose 命令行说明
许多代码……
Unity-Ads广告插件
移动拷贝构造函数
HCIE学习记录——数通网络基础
你的站点可能还没有准备好用于Site KitSite Kit 无法访问 WordPress REST API。请确保其已在您的站点上启用。
数学工具-desmos 图形曲线