东莞seo网站优化方式深圳网站快速备案
news/
2025/9/27 0:06:40/
文章来源:
东莞seo网站优化方式,深圳网站快速备案,本科自考有什么专业,装修设计公司网站排名关于类似的帖子好像很多#xff0c;但是没有找到具体能帮我解决问题的办法。还是自己深究了好久才基本知道app上面的xpath定位和web上的不同点#xff1a;
先放一个图#xff1a; A#xff0c;先说说不用xpath的场景#xff0c;一般是用于存在id或者name。可能没有看到na…关于类似的帖子好像很多但是没有找到具体能帮我解决问题的办法。还是自己深究了好久才基本知道app上面的xpath定位和web上的不同点
先放一个图 A先说说不用xpath的场景一般是用于存在id或者name。可能没有看到name,别慌继续看。 1app上面定位用的最多的当然是id也就是上面看到的resource-id,后面就是其所对应的值。所以在定位的时候可以是driver.find_element_by_id(com.wlqq:id/title_left_btn).当然注意一点就是如果id不是唯一的那么此办法行不通可考虑增加下标值[x]来区分如何加后面的xpath会提到但是如果很多的话可能自己都会数错。。。。。顺便说一下我也在用robotframeworkappiumLibrary这里的使用方式就是 click element | idcom.wlqq:id/title_left_btn。id应该就这样用了吧。 2当然第二种常用的办法就是name而这里的name和web也就是html里面的name不太一样web里面的name就是标签对应的属性name的值而这里其实是上面图里的text的值。当然也就是在使用的时候需要用by_name(账单)或者是 name账单。
B以上两点是常用的但是也是最简单的定位方式下面就回到正题说一声xpath了。用到xpath的场景主要为没有id或者没有name或者name是一个不可控的值或者叫会发生变化的值。另外不知道xpath是什么的就自行百度了吧。其实简单点就是按路径定位包括一级或者多级。顺便说一下其实路径分两种一种是绝对路径以第一个标签为参照物另一种是相对路径已其他已知的标签为参照物。
1先说说有id或者name的场景使用xpath的情况。有id或者name为什么不直接用当然可以像上面那样直接用。当然也可以装逼用xpath。不过当id不唯一也就是多个的时候这种能解决问题。
就比如上面的账单和我要的id都是com.wlqq:id/title_left_btn当前页面只有只有这两个id是这个那么你在用id定位账单的时候就需要写xpath//android.widget.TextView[resource-idcom.wlqq:id/title_left_btn])[1] 定位我要就是xpath//android.widget.TextView[resource-idcom.wlqq:id/title_left_btn])[2],
此处注意三点
a下标是从1开始而不是0;
b如果有下标需要用括号把前面的部分括起来并且前面需要加xpath,可能有些人习惯了前面都加xpath但是像我这种只习惯写//开头不写xpath的就被坑惨了。。。反正不容易发现是因为没有写xpath,也可能是我个人比较坑吧。
c就是和web不一样的就是标签的取值在这里取的是class的值android.widget.TextView而不是看到的标签TextView具体原因没有深究。反正记住用class代替标签就对了。
当然是用name的情况也是一样的。无非就是//android.widget.TextView[text我要]另外注意下这里使用的text而用name或报错原因也没有深究过本人太low。。和上面的resource-id一样用xpath的时候就用本身显示的就好了。也好记。
另外上面的只是为了说明1个层级的时候xpath的用法xpath的书写规则基本是越少越好。所以层级也是越少越好。有1层可以唯一定位就不要2层。 可能有点废话了。
2卧槽终于可以进入重点了。就是没有id或者name的场景。 先来一张图 1 现在有一个场景就是我需要点击上面那个小人图标但是他没有id和text属性。能想到的办法就是下面要讲的xpath了。
a用绝对路径的写法就是如果图上的第一个是最顶上的话就是 //android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.LinearLayout[2]/android.widget.ImageButton
这种写法注意一下几点:
1), [2]注意是2而不是3因为与标签的值有关。只有2个LinearLayout。
2), 路径长度偏长而且因为只有class的值对于一些页面控件较多的可能不止一个也就是可能这种写法也都不是唯一。
3),绝对路径基本很少使用如果人品太差遇到页面全是没有id或者name的那就没办法了。或者考虑一些坐标。(关于坐标存在的换手机存在适配分辨率的问题在下也有研究对策。不知道你是否有兴趣看看)
b现在就是本文的重点了使用相对路径的办法来定位。
1大家可以看到这个图里面有一个唯一的中文词汇--钱包。我们可以通过这个钱包来定位我们的小人图片。先分析下位置关系。 找找关系也就是如图所示小人图标3是钱包1的弟弟2LinearLayout标签的儿子ImageButton。儿子好理解xpath的层级关系也就是父子关系用/表示。//android.widget.LinearLayout/android.widget.ImageButton这样就能表示弟弟的儿子了。但是现在问题是怎么表示钱包的弟弟
xpath里面有一个轴简单点可以理解为一个函数吧。我这样认为的。preceding-sibling:: 可以找到节点前面也就是哥哥节点following-sibling::可以找到节点后面也就是弟弟节点关于轴的更多用法啊可以自行百度xpath的语法。这里还有一个用的多的就是parent:: 可以找到节点的父亲节点。但是父亲节点可以用..表示。下面就来具体说一下怎么用
基本知识已经介绍到此了。那么这里的定位方法就是上图中的3个层级//android.widget.TextView[text钱包]/following-sibling::android.widget.LinearLayout/android.widget.ImageButton。 第一级就同前面说的唯一的找到钱包这个位置后面的一级就是钱包的弟弟也就是following-sibling::android.widget.LinearLayout。当然注意因为是紧挨着的所以弟弟没有下班可想而知如果是第几个弟弟就加个下标吧。哥哥也是同理。
2前面用到了兄弟的关系下面说一下儿子与父亲的关系。父子关系还是用图来说明。 们的钱包1的父亲2有一个儿子3的儿子4就是我们的小人图标。这就是找关系。关系找到了那我们就可以用这个关系来写xpath了。也就是钱包//android.widget.TextView[text钱包]的父亲/parent::android.widget.RelativeLayout 的第二个classandroid.widget.LinearLayout的儿子/android.widget.LinearLayout[2]的儿子小人/android.widget.ImageButton,好我们连起来就是//android.widget.TextView[text钱包]/parent::android.widget.RelativeLayout/android.widget.LinearLayout[2]/android.widget.ImageButton。顺便说一下父亲这个位置可以用..来代替相比很多人都知道..在路径里面指的就是上级。所以可以用//android.widget.TextView[text钱包]/../android.widget.LinearLayout[2]/android.widget.ImageButton这个来代替上面的写法。最后再强调下 关于这个地方下标为什么是[2]是因为只与class相同的有关。钱包的class不一样。所以它就不算了。
3关于相对路径的父子关系已经兄弟关系相比大家应该有所体会了吧。如果还是没太懂咱们再来个复杂点的例子。可能只是举例说明下语法。实际下面的可能不会这样复杂的写。先上图 假设我们需要通过加入购物车这个位置来定位我们的立即定位按钮那么我们的一种写法就是图上的这个关系7层级。也就是加入购物车7(//android.widget.TextView[text加入购物车])的父亲1/..的父亲2/..的父亲3(/..)的第二个兄弟4/following-sibling::android.view.View[2]的儿子5(/android.view.View)的儿子6(也就是我们的立即购买/android.widget.TextView)连起来就是
//android.widget.TextView[text加入购物车]/../../../followingsibling::android.view.View[2]/android.view.View/android.widget.TextView。
注意使用text的时候避免使用输入框的默认输入值因为当你真实输入值之后就没有这个text了也就找不到路径了。另外也可以用模糊匹配xpath有一个contains函数。用法//android.widget.TextView[contains(text,购物车)].也能找到“加入购物车”这个位置。自行体会去吧。。。
最后不知道你是否有看懂欢迎各位朋友留言指正。在下也喜欢技术交流。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/918929.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!