selenium+unittest自动化测试(二)---浏览器控制及元素定位的方法
目录
一、浏览器控制方法
二、元素定位的方法
1、id定位
2、name定位
3、class定位
4、tag定位
5、link_text定位
6、partial_link_text定位
7、XPath定位
8、CSS定位
9、复数定位
三、针对元素的常见操作方法
四、举例
五、遇到的问题
一、浏览器控制方法
1、打开网页
from selenium import webdriver
driver = webdriver.Chrome()
2、页面刷新
driver.refresh()
3、访问地址
driver.get("http://www.baidu.com")
4、页面切换
driver.back() #返回上一页
driver.forward() #切换到下一页
5、设置窗口大小
driver.set_window_size(540,960) #设置窗口大小
driver.maximize_window() #设置窗口占满整个屏幕
6、截屏
driver.get_screenshot_as_file("D:\")
7、退出
driver.close() #关闭当前窗口
driver.quit() #关闭浏览器进程
8、设置休眠
time.sleep(3)
二、元素定位的方法
以下8种是通过元素的属性直接定位:
1、id定位
find_element_by_id(self, id_)
2、name定位
find_element_by_name(self, name)
3、class定位
find_element_by_class_name(self, name)
4、tag定位
find_element_by_tag_name(self, name)
说明:简单明了可以看到id、name、class、tag且同一界面不重复的元素,可以直接通过以上四个id、name、classname、tagname的方式定位。比如说,在用户登录界面中,用户名输入的文本框定位如下:
那我们就可以通过它的name属性去定位这个元素,如下:
driver.find_element_by_name('userName')
5、link_text定位
find_element_by_link_text(self, link_text)
6、partial_link_text定位
find_element_by_partial_link_text(self, link_text)
说明:导航栏、超链接等可以用以上两种方式定位,如下这个元素包含href="https://blog.csdn.net/wxt_hillwill?spm=1000.2115.3001.5343",说明它是个超链接:
那我们就可以通过它的link_text属性去定位这个元素,如下:
self.driver.find_element_by_link_text('wxt_hillwill的博客_CSDN博客')
或者:
self.driver.find_element_by_partial_link_text('wxt_hillwill的博客')
7、XPath定位
find_element_by_xpath(self, xpath)
说明:① 可以直接鼠标右击元素,选择Copy->Copy XPath,导出元素完整的XPath后直接定位:
② 也可以通过元素中的id、name、class去定位,但要确保它在这个页面上是唯一的,像下面这样:
driver.find_element_by_xpath("//*[@class='btn login-button ng-scope']")
③ 如果一个元素的属性不明显,无法直接定位,这时候我们可以先找它的父元素,再找下个层级。也就是通过xpath的父子层级定位方式去定位元素。
如下通过‘登录’按钮的父元素去定位‘登录’这个‘button’:
父元素的xpath为:
//*[@id='app']/div[2]/div/ng-include/div/div/div/form/div[2]
通过父元素定位‘登录’这个‘button’:
driver.find_element_by_xpath("//*[@id='app']/div[2]/div/ng-include/div/div/div/form/div[2]/button")
④ xpath逻辑运算定位方式,可以多个属性逻辑运算的,可以支持与(and)、或(or)、非(not)。一般用的比较多的是and运算,找到同时满足2个属性的元素。
这个我还没用过。
⑤ xpath的模糊定位方式:contains、starts-with、ends-with、matchs。比如下面这个元素我一直定位不到,最后用了模糊定位方式,方法如下:
driver.find_element_by_xpath("//*[contains(text(), '确定')]")
8、CSS定位
find_element_by_css_selector(self, css_selector)
说明:① 可以鼠标右击元素,选择Copy->Copy selector,导出元素的CSS后直接定位。
② 也可以通过元素中的id、class、标签去定位,需要注意的是:
css用 #号表示id属性;
css用 .表示class属性;
css直接用标签名称表示标签属性;
故如下这个元素的CSS定位方式为:
driver.find_element_by_css_selector('.btn.btn-es-red.ng-scope')
③ css还支持标签和属性组合,像这个样子:
driver.find_element_by_css_selector("button.btn.btn-es-red.ng-scope")
④ css同样也可以实现逻辑运算,同时匹配两个属性,这里跟xpath不一样,无需写and关键字。不过我还没有用过,所以没有例子。
⑤ css也支持层级关系,这是上面用xpath写的层级定位:
driver.find_element_by_xpath("//*[@id='app']/div[2]/div/ng-include/div/div/div/form/div[2]/button")
现在我们给它改成css的格式,就是这个样子:
driver.find_element_by_css_selector("#app>div.login.ng-scope>div.ng-include>div>div>div>form>div.login-form-container>button")
9、复数定位
以上8种都有复数形式,区别是复数形式定位返回的是一个list队列,然后还需要从这个队列中找到需要的元素:
id复数定位find_elements_by_id(self, id_)
name复数定位find_elements_by_name(self, name)
class复数定位find_elements_by_class_name(self, name)
tag复数定位find_elements_by_tag_name(self, name)
link复数定位find_elements_by_link_text(self, text)
partial_link复数定位find_elements_by_partial_link_text(self, link_text)
xpath复数定位find_elements_by_xpath(self, xpath)
css复数定位find_elements_by_css_selector(self, css_selector)
三、针对元素的常见操作方法
clear 清除元素的内容
send_keys 模拟按键输入
click 点击元素
submit 提交表单
size 获取元素的尺寸
text 获取元素的文本
get_attribute(name) 获取属性值
location 获取元素坐标,先找到要获取的元素,再调用该方法
page_source 返回页面源码
driver.title 返回页面标题
current_url 获取当前页面的URL
is_displayed() 设置该元素是否可见
is_enabled() 判断元素是否被使用
is_selected() 判断元素是否被选中
tag_name 返回元素的tagName
context_click(elem) 右击鼠标点击元素elem,另存为等行为
double_click(elem) 双击鼠标点击元素elem,地图web可实现放大功能
drag_and_drop(source,target) 拖动鼠标,源元素按下左键移动至目标元素释放
move_to_element(elem) 鼠标移动到一个元素上
click_and_hold(elem) 按下鼠标左键在一个元素上
perform() 在通过调用该函数执行ActionChains中存储行为
send_keys(Keys.ENTER) 按下回车键
send_keys(Keys.TAB) 按下Tab制表键
send_keys(Keys.SPACE) 按下空格键space
send_keys(Kyes.ESCAPE) 按下回退键Esc
send_keys(Keys.BACK_SPACE) 按下删除键BackSpace
send_keys(Keys.SHIFT) 按下shift键
send_keys(Keys.CONTROL) 按下Ctrl键
send_keys(Keys.ARROW_DOWN) 按下鼠标光标向下按键
send_keys(Keys.CONTROL,‘a’) 组合键全选Ctrl+A
send_keys(Keys.CONTROL,‘c’) 组合键复制Ctrl+C
send_keys(Keys.CONTROL,‘x’) 组合键剪切Ctrl+X
send_keys(Keys.CONTROL,‘v’) 组合键粘贴Ctrl+V
四、举例
import unittest2
import selenium import webdriverclass webcheck(unittest2.TestCase):"""界面登录测试"""@classmethoddef setUp(cls):# 打开浏览器cls.driver = webdriver.Chrome()# 将浏览器设置为占满整个屏幕cls.driver.maxmize_window()#访问网页cls.driver.get('https://xxx')def test_openit(self):# 找到name为userName的元素,并输入用户名hillwill_wxtself.driver.find_element_by_name("userName").send_keys("hillwill_wxt")# 找到name为password的元素,并输入密码123456self.driver.find_element_by_name("password").send_keys("123456")# 点击登录按钮self.driver.find_element_by_xpath("//*[@id='app']/div[2]/div/ng-include/div/div/div/form/div[2]/button").click()@classmethoddef tearDown(cls):cls.driver.close()if __name__=='__main__':unittest2.main()
五、遇到的问题
问题描述:click()点击按钮没有反应
解决方法:click()点击按钮没有反应时,讲click()改为Enter操作通常可以解决问题。例如,将以下代码
# 点击登录按钮
self.driver.find_element_by_xpath("//*[@id='app']/div[2]/div/ng-include/div/div/div/form/div[2]/button").click()
改为
# 点击登录按钮
Element el = self.driver.find_element_by_xpath("//*[@id='app']/div[2]/div/ng-include/div/div/div/form/div[2]/button")
el.sendKeys(keys.ENTER)
selenium+unittest自动化测试(二)---浏览器控制及元素定位的方法相关推荐
- 自动化(二)——八种元素定位方法
自动化(二) 一.元素定位 1)如何元素定位 二.元素定位方式 1)id定位 2)name定位 3) class_name定位 4) tag_name定位 5) link_text以及partial_ ...
- selenium+unittest自动化测试(一)---环境搭建及用例编写规则
目录 一.selenium.unittest简介 二.环境搭建 1.安装selenium库 2.安装unittest2框架 3.安装浏览器驱动 三.编写规则 1.测试类 2.以test开头 3.set ...
- web自动化学习之selenium安装喝浏览器驱动和元素定位
selenium安装卸载 安装 pip install selenium 查看 pip show selenium 卸载 pip uninstall selenium 快捷键: ctrl+alt+sp ...
- python+selenium+unittest自动化测试框架
前言 关于自动化测试的介绍,网上已有很多资料,这里不再赘述,UI自动化测试是自动化测试的一种,也是测试金字塔最上面的一层,selenium是应用于web的自动化测试工具,支持多平台.多浏览器.多语言来 ...
- Python + Selenium + UnitTest自动化测试面试题目整理
1.如何使用Selenium进行自动化测试 ? 结合Python + Selenium + UnitTest 2.自动化测试框架 分层+PO模式: 包含基础封装层BasePage.PO页面对象层.Te ...
- selenium课程笔记3-使用selenium中的webdriver对浏览器操作-页面元素定位及操作
1.打开浏览器,打开网页 1 from selenium import webdriver 2 dr=webdriver.Chrome() 3 dr.get('http://www.baidu.com ...
- selenium自动化测试——常见的八种元素定位方法
selenium常用的八种元素定位方法 1.通过 id 定位:find_element_by_id() 2.通过 name 定位:find_element_by_name() 3.通过 tag 定位: ...
- python+selenium自动化(四)__八大元素定位之class_name、tag_name、partial_link_text、css_selector
selenium八大元素定位(二) 上节讲了4种定位ID.NAME.LINK_TEXT.XPATH,这节继续学习剩下的4种元素定位方式 1.通过class_name定位 我们需定位上图中的" ...
- APP自动化测试系列之3种元素定位工具
VOL 179 30 2020-11 今天距2021年31天 这是ITester软件测试小栈第179次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 0 ...
最新文章
- jsp验证身份证号并自动计算年龄和出生日期
- Spring Boot错误处理机制以及定制自己的错误页面
- 在 asp.net mvc中的简单分页算法 (续)
- 4月22日(牛马不对嘴)
- 创建一个springMVC项目总结
- WGAN新方案:通过梯度归一化来实现L约束
- C#如何用正则表达式截取https和带端口的域名
- (小白)函数一: 声明函数的方法—语句定义法和表达式定义法的区别
- 2016计算机知识点,2016年计算机一级考试知识点
- Ubuntu 12.04忘记登录密码及修改密码
- Matlab 编程 《计算流体力学基础及应用(约翰D安德森)》 亚声速-超声速等熵喷管流动CFD解法 拉瓦尔喷管 守恒形式方程解法
- 开学蓝牙耳机选哪个?音质好的蓝牙耳机排行
- 微型计算机原理DL,微机原理试题
- php对接抖音小程序担保支付/头条小程序担保支付
- 【学习笔记 31】 buu [0CTF 2016]piapiapia
- DEFCON携手百度安全落地中国,打造国际化网络安全交流平台
- 【论文写作】Word文档中的MathType公式大小不一导致版面很难看完美解决方法
- 【每日一库】ppcp - 带进度条的拷贝工具
- 跳跃游戏 (贪心/动态规划/dfs)
- 软件公司项目经理岗位职责
热门文章
- python try except 嵌套_try except嵌套之异常的传递
- python实时数据存储与显示_利用python进行数据加载和存储
- 计算机丢失winmm.dll,winmm.dll
- .wav格式的声音文件怎么变成matlab 中的.mat文件
- Dell PowerEdge - 如何配置 iDRAC9 和生命周期控制器网络 IP
- Maven学习总结(57)—— 如何提高 Maven 的构建速度?maven-mvnd 又是什么鬼?
- 人民日报谈焦虑成社会常见病:好的人生需要文火慢炖
- Netty学习总结(3)——Netty百万级推送服务
- php 截取base64内容,PHP-从长文本中删除Base64字符串
- mysql备份到制定目录_写一个脚本定时自动备份mysql到指定目录