
在selenium中我们有时候也会看到这样定位元素的方法 driverfind_elements(ByCLASS_NAME, 'YT') , 如果要用到这样的写法,是需要导入By这个模块也就是 from seleniumwebdrivercommonby import By ;By模块,用来定位元素的。和另外一个find的功能一样,就是写法不一样。
区别就是: 当element变成elements时,写法不变,就是返回的元素由返回单个元素变成了返回一个数组。
find_element 是查找一个元素对象并返回元素对象。当页面有多个元素对象时返回第一个找到的元素。
find_elements是查找页面所有元素并返回元素对象列表可以通过下标获取元素对象。a[0] 即第一个元素对象与find_element等效。
大部分人在使用selenium定位元素时,用的是xpath定位,因为xpath基本能解决定位的需求。css定位往往被忽略掉了,其实css定位也有它的价值,css定位更快,语法更简洁。
这一篇css的定位方法,主要是对比上一篇的xpath来的,基本上xpath能完成的,css也可以做到。两篇对比学习,更容易理解。
#表示 id选择器
表示 class选择器
>表示子元素,层级
一个空格也表示子元素,但是是所有的后代子元素,相当于 xpath 中的相对路径
1css可以通过元素的id、class、标签这三个常规属性直接定位到
2如下是百度输入框的的html代码:
3css用#号表示id属性,如:#kw
4css用表示class属性,如:s_ipt
5css直接用标签名称,无任何标示符,如:input
1css除了可以通过标签、class、id这三个常规属性定位外,也可以通过其它属性定位
2以下是定位其它属性的格式
[name=wd] [autocomplete='off'][maxlength='255']
css页可以通过标签与属性的组合来定位元素
inputs_ipt input#kw input[id='kw']
//form的id属性
form#form>span>input
//form的class属性
formfm>span>input
css也可以通过索引nth-child(1)来定位子元素,直接翻译过来就是第几个小孩
总结:选择标签后,找第几个小孩即可
Select控件第三个Opel
#select>select>option:nth-child(3)
CheckBox第一个Volvo
#checkbox>input:nth-child(1)
CheckBox第二个Saab
#checkbox>input:nth-child(4)
RadioBox第二个Saab
#radio>input:nth-child(4)
通过索引nth-of-type(2)来定位子元素,按照分类指定
选择select的saab
#select>select>option:nth-of-type(2);
选择 id 为 radio 的 p 下的第 1 个子节点
p#radio>input:nth-of-type(4)+label
选择id 为radio 的p 下的第4 个input 节点之后挨着的 label
节点
p#radio>input:nth-of-type(4)~label
css同样也可以实现逻辑运算,同时匹配两个属性,这里跟xpath不一样,无需写and关键字
[type='checkbox'][name='checkbox1']
css语法远远不止上面提到的,还有更多更强大定位策略,有兴趣的同学可以继续深入研究!
如觉得文章对您有帮助,还请帮忙转发!
1获取当前网页标题:String title=drivergetTitle();
2获取当前网页的URL:String url=drivergetCurrentUrl();
3获取元素的文本值,比如链接,纯文本等:String text=driverfindElement(By location)getText();
4获取元素指定属性的值:String attribute=driverfindElement(By location)getAttribute("属性"); //这里的参数可以是class、name等任意属性
5获取元素输入框内的文本值:String attribute=driverfindElement(By location)getAttribute("value");
6获取元素标签名称:String tagName=driverfindElement(By location)getTagName();
1是否显示:使用elementis_displayed()方法。
2是否存在:使用find_element_by_xxx()方法,捕获其抛出的异常, 如果存在异常的话则可以确定该元素不存在。
3是否被选中:一般判断表单元素,如radio或checkbox是否被选中,使用elementis_selected()方法( 返回true代表已被选中,返回false代表未被选中 )。
4是否有效:即是否为灰化状态,使用elementis_enabled()方法( 可用于判断button/checkbox/radio是否置灰 )。
有时候,什么定位元素的方法都试过了,还是定位不到元素,就考虑frame切换问题 driverswitchTo()frame("定位到的frame元素"); //接下来就可以在这个frame框架内定位该框架里的元素了 driverfindElement(Byname("message"))sendKeys("top"); //如果定位另一框架内元素,需返回到web页面,再进行切换 driverswitchTo()defaultContent(); driverswitchTo()frame("要定位的frame元素");
$(function(){ var html="<div class='fg' style='background-color:pink;color:red'>我是被动态创建的</div>" $("fg")append(html); }) 应将代码<a href=">
1通过selenium定位方式(id、name、xpath等方式)定位table标签
#html源码<table border="5" id="table1" width="80%">#selenium *** 作代码table1=driverfind_element_by_id('table1')
2获取总行数(也就是获取tr标签的个数)
#html源码<tr><th>姓名</th><th>性别</th></tr>#selenium *** 作源码
table_rows = table1find_elements_by_tag_name('tr')
3获取总列数(也就是tr标签下面的th标签个数)
#html源码<tr><th>姓名</th><th>性别</th></tr>#selenium *** 作源码:第一个tr标签下有多少个th
table_rows = table_rows[0]find_elements_by_tag_name('th')
4获取单个cell值
#selenium *** 作源码:第一行第二列的text值row1_col2 = table_rows[1]find_elements_by_tag_name('td')[1]text
5取值比对~
笔记:
01设置元素等待时间
自动化测试的时候,元素定位没有错,但是跑脚本的时候却报错了
例如,登录的时候要等登录页面加载出来才能输入用户名和密码
selenium设置元素等待时间的3种方式及区别
1sleep() --固定等待时间:强制等待,不能把握准确的等等时间,适合调试时用
2implicitly_wait() --隐式等待时间:等页面加载完成才执行下一步 *** 作,一般设置一次即可
3WebDriverWait --显示等待时间:配合untill()和not untill()方法,根据判断条件 灵活处理等待时间
要先设置一个超长时间,在这个时间内,程序根据调用频率每隔几秒查看一下,如果条件满足,则执行下一步 *** 作,若不满足且超过了等待时间则抛出异常
导包:from seleniumwebdriversupportui import WebDriverWait
使用:WebDriverWait(driver, 超时时间, 调用频率, 要忽略的异常)until(要执行的方法, 超时时返回的错误信息)
实例:
replace:
02键盘事件Keys类
制表符:send_keys(KeysTAB)
退出键:send_keys(KeysESCAPE)
F1:send_keys(KeysF1) f1~f12 以此类推
03二次定位
顾名思义,通过多个元素,定位两次
drfind_element(ByCLASS_NAME,"s_input")send_keys("python")
二次定位:
drfind_element(ByNAME,"query")find_element(ByCLASS_NAME,"s_input")send_keys("python")
04selenium鼠标悬停类-- ActionChains()
导包:from seleniumwebdrivercommonaction_chainsimport ActionChains
实例:将鼠标移动至更多设置,悬停鼠标
elem1= drfind_element(ByLINK_TEXT,"设置")
ActionChains(dr)move_to_element(elem1)perform()
05selenium警告框的处理
很多web应用经常会遇到JavaScript编写的alert 、confirm 以及prompt d窗,需要用到switch_toalert来切换d窗,并对d窗进行输入信息,关闭等处理。
switch_toalerttext --获取d窗文本信息
switch_toalertaccept() --点击d窗中确定按钮
switch_toalertdismiss() --点击d出中取消按钮
switch_toalertsendKeys("字符串") --在d窗中输入信息
实例:
06下拉菜单选择的三种方式
导包:from seleniumwebdriversupportuiimport Select
#选择下拉框的o2
elem1 = drfind_element(ByID,"s3Id")
1:根据value值定位
Select(elem1)select_by_value("o2val")
2根据index定位
Select(elem1)select_by_index(1)
3根据下拉框文本信息定位
Select(elem1)select_by_visible_text("o2")
07多窗口切换
window_handles --获取所有窗口句柄
switch_towindow(指定窗口) --切换到指定窗口
08selenium之JS *** 作浏览器滚动条位置
execute_script("windowscrollTo(0,n);")
09selenium之JS *** 作隐藏元素
隐藏元素的标识:style="display:none;"
一般我们通过将隐藏元素的属性修改成显示再定位
10 *** 作excel文件
将测试数据参数化用到
101准备参数化数据文件
102导包
打开文件,填写文档路径
运行结果:
定位到sheet的位置
读取sheet的行和列的内容
#读取表的行的方法
rows = sheet1nrows
print("行数",rows)
columns = sheet1ncols
print("列数",columns)
读取指定行的值
#读取指定行的值
rowValue1 = sheet1row_values(0)
print(rowValue1)
#读取指定列的值
colValue1 = sheet1col_values(0)
print(colValue1)
#输出所有用户名和对应的密码
for iin range(1,rows):
print("用户名:" + sheet1row_values(i)[0] +",密码:" + sheet1row_values(i)[1])
以上就是关于selenium中find_element和find_elements的区别全部的内容,包括:selenium中find_element和find_elements的区别、selenium之css定位小结、selenium获取测试对象的内容和状态等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)