jquery同级元素选择器-Selenium使用Xpath+CSS+JavaScript+jQuery定位

2023-08-23 0 7,656 百度已收录

作者博客:

【第1部分】开篇:先了解Xpath的4种定位方法

我告诉你,你总是靠那种firebug,chrome的F12什么的右键复制xpath,总会有三天踩地雷找不到的情况。 这时候你就需要学会自己写xpath了,人脑永远比笔记本聪明,开始给我学习xpath句型吧!

第一种方式:通过绝对路径定位(相信你不会使用这些方法)

By.xpath(“html/body/div/form/input”)

By.xpath("//输入")

第二种方式:通过元素索引定位

By.xpath("//输入[4]")

第三种方式:使用xpath属性定位

By.xpath("//输入[@id='kw1']")

By.xpath("//输入[@type='name'和@name='kw1']")

第四种方式:使用部分属性值匹配(最强大的方式)

By.xpath("//输入[starts-with(@id,'nice')

By.xpath("//input[ends-with(@id,'非常漂亮')

By.xpath("//输入[包含(@id,'好漂亮')]")

【阐明】

starts-with 顾名思义,它匹配属性开头的关键字。

contains 匹配属性值中包含的字符串。

text() 匹配显示的文本信息,这里也可以用于定位。

【例子】

//input[starts-with(@name,'name1')] 查找name属性中起始位置包含关键字'name1'的页面元素

//input[contains(@name,'na')] 查找name属性中包含na关键字的页面元素

百度搜索,则xpath写为 //a[text()='百度搜索'] 或 //a[contains(text(),"百度搜索")]

【第二部分】我的一位同学在使用selenium定位时踩过的坑

上次有同学在定位元素时,使用火狐浏览器的firebug工具来定位HTML代码:

大概就是这样,死活无法确定位置,然后利用xpath属性和关键字的并列关系来定位。

//*[包含(@onclick, 'x64_3.01.3730.spkg') 和@name='delete']

【第三部分】切换iframe时遇到的几个鬼魂

(1)切换iframe时,有时iframe有丰富的id,因此可以直接定位并使用,但当iframe没有id信息时,如下图所示,

当然,实际情况中jquery同级元素选择器,会出现没有id属性、name属性为空的情况。 这时候就需要先定位iframe元素对象。 这里可以先用标签来定位,也可以达到同样的效果。

下面的代码:

iframe = 驱动程序。 按标签名称查找元素(“iframe”)

司机。 切换到框架(iframe)

切换后,可以正常定位iframe上面的元素,如driver.find_element_by_tagname(table),也可以使用xpath方法:例如Xpath=//*[contains(@src, 'sysmanage/systemupgrade.action ')]某种类型的。

(2)如果有多个iframe标签,那么你要查看总的iframe标签,看看你所针对的iframe元素是链​​表中的第一个iframe元素(从0开始,基于JavaScript),你可以使用chrome浏览器的F12控制台(Console)输入代码document.getElementsByTagName('iframe').length复制iframe的宽度(即数字),然后从0开始计数。

【下图可能有点大,看不到最左边的控制台,右键图片->在新窗口中打开】

(3)对iframe操作完成后,如果想返回主页面操作元素,可以使用switch_to_default_content()方法返回主页面。

下面的代码:

iframe = 驱动程序。 按标签名称查找元素(“iframe”)

司机。 切换到框架(iframe)

switch_to_default_content()

(4) 如何判断元素是否在iframe上?

1. 找到元件后,切换到firepath界面。

2.查看firebug工具左上角,如果显示Top Window,则说明没有iframe。

3、如果显示iframe#xxx,则表示在iframe上,#后面是它的id。

【第四部分】Selenium用javascript定位

因为selenium的核心引擎是由JavaScript驱动的,所以只要selenium自带的原始辣鸡方法出现无法定位、无法点击的并发症,一旦出现,就可以使用JavaScript。 除了 JavaScript 之外,还有 jQuery。 绝技技能,一一来,你被杀,他会来顶替,滔滔江水永不停歇。

1.下面总结了js定位的5种方式

除了id定位到单个元素元素对象外,其他所有元素都返回一个列表对象

1.通过id获取

文档。 getElementById("id")

2.通过名字获取

文档。 getElementsByName("名称")

返回的是列表

3.通过标签名称选择元素

document.getElementsByTagName(“标签”)

4.通过CLASS类选择元素

document.getElementsByClassName(“类”)

兼容性:IE8及以下版本浏览器未实现getElementsByClassName方法

5.通过CSS选择器选择元素

document.querySelectorAll("css 选择器")

兼容性:IE8及以下浏览器仅支持CSS2标准选择器句型

【示例代码】

js = 'document.getElementById("helloId").click();'

司机。 执行脚本(js)

js1 = 'document.getElementsByClassName("helloName")[0].value = "王大明";' //整个HTML文档中第一个使用CSS样式类的class="helloName"属性,其value属性值设置为“王大明”

司机。 执行脚本(js1)

【第五部分】Selenium使用jquery定位【逆天神惊,眼睛都瞪圆了】

JQuery 是一个诞生于 2006 年 1 月的基于封装 JavaScript 的框架。你经常会看到带括号 $('XXX') 的欧元符号,其实就是 document.getElementBy 的 js 方法。 至于XXX后面如果是.,则为document.getElementByClass,如果带#,则为document.getElementById。

【看不清图片,右键在新窗口打开图片】

1.身份证号

inputTest="$('#smart_input').val('帅哥,我又可以剪了')"

司机。 执行脚本(输入测试)

2. 班级

inputTest="$('.usersearch').val('帅哥,我又可以剪了')"

3.类型

inputTest="$(':text').val('帅哥,我又可以剪了')"

4. 层次结构

inputTest="$('#searchForm>#smart_input').val('帅哥,我又可以剪了')"

inputTest="$('#searchForm #smart_input').val('我又帅又可以剪了')" 【注意两个id选择器“#searchForm #smart_input”之间有一个空格]

inputTest="$('#searchForm>input:first').val('帅哥,我又可以剪了')"

选择最后一个输入元素:

clickbutton="$('#searchForm>input:last').click()"

选择前几个输入元素

inputTest="$('#searchForm>input:eq(0)').val('帅哥,我又可以剪了')" 从 0 数到第一个

inputTest="$('#searchForm>input:nth-child(1)').val('帅哥,我又可以剪了')" 当然,这也是可以的,nth-child算作第一个1

知识链接:

1. nth-child(N):下标从1开始; eq(N):下标从0开始;

2. nth-child(N):选择多个元素; eq(N):选择一个元素。

5、其他

#inputTest="$('input[name=query]').val('帅哥jquery同级元素选择器,我又可以剪了')"

inputTest="$('input[id=smart_input]').val('帅哥,我又可以剪了')"

-------------------------------------------------- -------------------------------------------------- ----------------------------

【附录1】xpath句型使用基础知识

如何使用 XPath:

示例1:html/body/div[1]/div[2](如果对html不熟悉,需要自行百度html。)

xpath的意思是:html标签下 -> body标签下 -> 第一个div标签下 -> 第二个div标签下

很好理解,继续

示例2:.//*[@id='content']/div[2]/ul

这样一来,有些人就会不明白了。//*[@id='content'] 是什么意思?

。 代表当前路径

a//b表示:a标签下的后代b标签

* 可以是任意标签

[@id='content'] 表示id为内容

所以:这个反例的意思是:在任何以 id 作为内容的子标签下面 -> 在第二个 div 标签下 -> ul 标签

学习完XPath的基础知识后,我们将开始进阶学习

//p[text()='a']:带有文本a的p标签

//p[text()='a']:文本包含a的p标签

//a[@class='abc']:class为a的p标签(当然。既然可以用@class,就必须用@id,为什么不把@src和@href关联起来呢?)

//p[not(@class='a')]:类不是a的p标签

好了,进阶完成了,如果想使用更高级的XPath,首先要对上面的内容进行属性化,然后与Selenium结合使用

Xpath与其他定位方式对比:(主要是与CSS定位对比)

XPath最大的用处就是能够向下搜索,但缺点就是速度太慢。

【附录2】CSS定位句型基础知识

CSS定位速度快,功能多,但不能向下搜索。 它比xpath更容易使用,并且执行效率比xpath更快。 我做过两种定位对比测速,我认为是最好的定位方法。

一般使用总结:

下面是精华

1. *:checked 选择*的checked元素

2. li.refined.list.group.item(如果类中间有空格,可以全部写.+.+.,也可以只写任意一个)

.checkbox[type^='check'][onclick*='Bebe'][checked$='ed'] +a

(开头 ^= 包含 *= 结尾 $= ) +a 是选择同级的前一个a

3. li a :选择li标签的后代a

5. li>a :选择li标签的子元素a

4. li, a : 选择li和a

5. li +a :选择下一个与li同级的a

6. li ~a :选择li同级以下的所有a

7. li>a:last-child /li>a:last-of-type : 选择li下的第一个a

8. li:not([class*='_']) : li 中的 calss 不包含 '_'

li:not(:nth-of-type(1)) :除第一个 li 之外的所有 li

9. li>a:nth-child(n)/li>a:nth-of-type(n):选择li下的第n个a

li>a:nth-last-child(n)/li>a:nth-last-of-type(n):选择li,最后第n个a

如果 n = odd 表示质数

如果 n = 偶数表示质数

div h2:nth-child(n) :当div的第n个子元素为h2时

div h2:nth-of-type(n):div下的第n个h2子元素

10. div[style]:div包含属性style

11. li>a:only-child : li下只有一个a标签

感谢这两位博主的三篇文章作为参考:

最后感谢Yoyo大师的开导!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 jquery jquery同级元素选择器-Selenium使用Xpath+CSS+JavaScript+jQuery定位 https://www.wkzy.net/game/142093.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务