https://testerhome.com/topics/1250

Appium 【已解决】 UiSelector 如何根据节点定位到父节点 / 兄弟节点?

liqing380 · 发布于 2014年08月11日 · 最后由 liqing380 回复于 2014年08月12日 · 2019 次阅读

结构如下:

 
String UiSelector="new UiSelector().className(\"android.widget.RelativeLayout\").childSelector(new UiSelector().className(\"android.widget.TextView\").text(\"Test邮件123xfm8c1o5\"))";
String xx=driver.findElementByAndroidUIAutomator(UiSelector).getText();
System.out.print("xx="+xx+"\n");

打印的是:Test222邮件123xfm8c1o5,也就是index为2的那个TextView节点。

问题:如何根据text是指定值的节点获取它的兄弟节点?

比如根据text值是Test邮件123xfm8c1o5的那个节点获取它的兄弟节点(index是0的那个textView)尝试:

driver.findElementsByAndroidUIAutomator(UiSelector+".fromParent(\"android.widget.RelativeLayout\").childSelector(new UiSelector().className(\"android.widget.TextView\").text(\"xfm8c1o5_1@qa186.cn\"))"
);

报错:

org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. (WARNING: The server did not provide any stacktrace information)
转载文章时务必注明原作者及原始链接,并注明「发表于 TesterHome 」,并不得对作品进行修改。
共收到 12 条回复

可以试下 getFromParent().

#1楼 @pajack getFromParent()的写法是?

@liqing380
假设你已定义了一个节点 "Test邮件"
UiObject mail = new UiObject(new UiSelector().text("Test邮件"));
利用该节点找到其兄弟:
UiObject content = mail.getFromParent(new UiSelector().text("Text内容"));

这是UiAutomator 的写法,在Appium 里要稍微变一下。

#3楼 @pajack 
看了你的解答,瞬间明白fromParent的意思了,非常感谢。

driver.findElementByAndroidUIAutomator( "new UiSelector().text(\"Test222邮件123xfm8c1o5\").fromParent(new UiSelector().className(\"android.widget.TextView\").index(4))").getText();

这样就可以根据text是指定值Test222邮件123xfm8c1o5的节点获取到了它的兄弟节点(index是4的那个textView)了

#4楼 @liqing380 给力

学习!!

学习~~

#3楼 @pajack 你这种用法,不会提示中文乱码吗

#4楼 @liqing380 UiObject mail = new UiObject(new UiSelector().text("Test邮件")); 你这种用法,不会提示中文乱码吗。

我试了下:运行用例时,提示:INSTRUMENTATION_STATUS: stack=com.android.uiautomator.core.UiObjectNotFoundException: UiSelector[TEXT=锟街伙拷锟絔

有什么解决办法吗

#3楼 @pajack UiObject mail = new UiObject(new UiSelector().text("Test邮件")); 你这种用法,不会提示中文乱码吗。

我试了下:运行用例时,提示:INSTRUMENTATION_STATUS: stack=com.android.uiautomator.core.UiObjectNotFoundException: UiSelector[TEXT=锟街伙拷锟絔

有什么解决办法吗

#10楼 @xiang2743 我这边很正常,没有乱码呢

不好意思,我找到原因了,是因为编码的问题,改为UTF-8 就可以了

回帖
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请点击☺
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空

[uiautomator篇] 找父亲节点和其他兄弟节点的更多相关文章

  1. Oracle递归查询父子兄弟节点

      1.查询某节点下所有后代节点(包括各级父节点) 1 // 查询id为101的所有后代节点,包含101在内的各级父节点 2 select t.* from SYS_ORG t start with ...

  2. JS获取子节点、父节点和兄弟节点的方法实例总结

    转自:https://www.jb51.net/article/143286.htm 本文实例讲述了JS获取子节点.父节点和兄弟节点的方法.分享给大家供大家参考,具体如下: 一.js获取子节点的方式 ...

  3. easyui Tree模拟级联勾选cascadeCheck,节点选择,父节点自动选中,节点取消,父节点自动取消选择,节点选择,所有子节点全部选择,节点取消,所有子节点全部取消勾选

    最近项目中用到easyui tree,发现tree控件的cascadeCheck有些坑,不像miniui 的tree控件,级联勾选符合业务需求,所以就自己重新改写了onCheck事件,符合业务需求.网 ...

  4. js 获取元素所有兄弟节点实例

    比如一个ul里面有10个li,而第3个li上有特殊的样式(比如颜色为红色,其他为黑色).我想把其他所有li——不包括红的li——的颜色也设为红色,此时,就需要获得红li的所有兄弟节点. 兄弟,就是和你 ...

  5. jQuery的父,子,兄弟节点查找方法

    以下罗列一下jQery下节点查找的方法: jQuery.parent(expr) 找父亲节点.能够传入expr进行过滤,比方$("span").parent()或者$(" ...

  6. [javascript] jquery的父子兄弟节点查找

    jQuery.parent(expr) 找父亲节点,可以传入expr进行过滤,比如$("span").parent()或者$("span").parent(&q ...

  7. JQuery的父、子、兄弟节点查找方法

    jQuery.parent(expr)           //找父元素 jQuery.parents(expr)          //找到所有祖先元素,不限于父元素 jQuery.children ...

  8. JQuery的父、子、兄弟节点查找,节点的子节点循环

    Query.parent(expr)           //找父元素 jQuery.parents(expr)          //找到所有祖先元素,不限于父元素 jQuery.children( ...

  9. jquery父、子、兄弟节点查找

    js var test = document.getElementById("test"); var parent = test.parentNode; // 父节点 var ch ...

随机推荐

  1. 学习笔记——Paint 1(MaskFilter)

    对于Paint没有很好的深入的学习过,在工作之余再巩固巩固. 1.Paint的BlurMaskFilter(模糊效果) 自定义一个View继承View 重写里面的onDraw方法.这里直接上代码了: ...

  2. uvm.sv——UVM之道

    文件: $UVM_HOME/src/uvm.sv 类: 无   `include "uvm_pkg.sv"   Thus spake the UVM master programm ...

  3. 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} 解决方法

    Tomcat启动时出现红色警告内容 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'sour ...

  4. 批处理文件 bat

    删除D盘的所有文件:del /a /f /q d:\*.* 删除指定目录的指定扩展名的文件:del /a /f /q 目录:\*.jpg 删除当前目录下的指定扩展名的文件(指定扩展名为jpg):del ...

  5. 测试ReplicaSets读写分离和故障转移

    读写分离实现步骤: 从库能够进行查询就更好了,这样可以分担主库的大量的查询请求. 1) 先向主库中插入一条测试数据 rs1:PRIMARY> db.c1.insert({age:30});db. ...

  6. UVA821 PageHopping (Floyd)

    求所有点直接的平均最短距离,保存一下出现过的点,题目保证是所有点连通,Floyd求出最短路以后两个for统计一下. #include<bits/stdc++.h> using namesp ...

  7. Android(java)学习笔记143:Android中View动画之 XML实现 和 代码实现

    1.Animation 动画类型 Android的animation由四种类型组成: XML中: alph 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动 ...

  8. java.sql.SQLException: Incorrect string value: '\xE6\x88\x91\xE7\x9A\x84...' for column 'groupName'

    java.sql.SQLException: Incorrect string value: '\xE6\x88\x91\xE7\x9A\x84...' for column 'groupName' ...

  9. IOS7.1 企业应用 证书无效 已解决

    http://www.cocoachina.com/bbs/read.php?tid=194213&keyword=7.1 关于IOS7.1企业版发布后,用户通过SARAFI浏览器安装无效的解 ...

  10. 2890: C--去掉+86

    2890: C--去掉+86 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 210  Solved: 91[Submit][Status][Web Bo ...