appium 怎么跳转页面定位元素

appium 怎么跳转页面定位元素,第1张

以下内容来自互联网,版权归原作者。

思路:因为没有name,id;其实剩下的选择已不多,要么xpath,要么className。xpath木有好印象(稳定性不高,加之10x后需要写全路径,相当崩溃),我决定十分个人色彩的建议使用className。

具体方法

用className获取所有该类型的元素

根据元素的位置确定元素的index;

获取目标元素。

示例:

List<WebElement> lis = driverfindElementsByClassName("androidwidgetImageView");//获取ImageView的所有元素

WebEelement targetEle = lisget(0);//获取列表中第一个元素

进阶:

你可以自己定义一个className的常量,然后封装个方法,提供大家使用:

public List<WebElement> getAllImges(){

List<WebElement> lis = driverfindElementsByClassName(AndroidClassNameIMAGEVIEW);

return lis;

}

使用的时候,就只需要调用此方法就可以了

此方法的好处:通吃的方法,基本可解决定位的问题;能解决多语言(自然语言)的困扰;

缺点:因为系统需要去获取List,就目前来看,运行效率不是很高,那直接是可以用肉眼看的到的速度在跑。。。

2、关于没有name,没有ID的元素的定位---特用篇

因为是特用,所以需要对页面元素做进一步的分析,找出其中的特性。这些特性主要为className,index,以及clickable等属性。

场景1:同一个页面有10个ImageView对象,而我们的目标元素的index为4,而同为ImageView且index为4的页面只有2个。那我们就可以根据这2个条件来组合查询条件,提高效率。

示例:

List<WebElement> lis = driverfindElementsByAndroidUIAutomator("new UiSelector()className("+"androidwidgetImageView"+")index(4)");

基于这个场景可以封装一个方法:

public List<WebElement> getElementsByClassAndIndex(String classname,int index){

List<WebElement> lis =null;

lis = driverfindElementsByAndroidUIAutomator("new UiSelector()className("+classname+")index("+index+")");

return lis;

}

场景2:同一个页面有10个ImageView对象,而其中index为4的有5个,而这时我们发现我们的目标元素的是clickable的。然后review页面发现,同时满足上述条件的只有2个。那么。。。

示例:

List<WebElement> lis = driverfindElementsByAndroidUIAutomator("new UiSelector()className("+"androidwidgetImageView"+")index(4)clickable(true)");

同样可以封装一个方法:

public List<WebElement> getElementsByClassAndIndexAndClickable(String classname,int index){

List<WebElement> lis =null;

lis = driverfindElementsByAndroidUIAutomator("new UiSelector()className("+classname+")index("+index+")clickable(true)");

return lis;

}

场景3:在分析页面元素的时候发现,页面相对比较简单,而且其中只有目标元素的index为4

示例:

driverfindElementByAndroidUIAutomator("new UiSelector()index("+index+")");

同样得到一个方法

public WebElement getElementByIndex(int index){

return driverfindElementByAndroidUIAutomator("new UiSelector()index("+index+")");

}

这样定位会报错。xpath是按照树的层级一层一层识别元素。在uiautomatorviewer,识别到的元素前缀都是从0开始,而转换成xpath,是需要从1开始的,类似第一个层级,第二个层级

driverfindElementByXPath(

"//androidwidgetLinearLayout[1]/androidwidgetFrameLayout[1]/androidwidgetLinearLayout[1]/androidwidgetLinearLayout[1]/androidwidgetLinearLayout[1]/androidwidgetEditText[1]");

改写下定位元素到1,继续调试下

添加JAVA_HOME变量,值:Jdk的安装路径,如:D:\Java\jdk170_45(只是例子,改成你的安装目录)添加CLASSPATH变量,值;%JAVA_HOME%\lib\toolsjar;%JAVA_HOME%\lib\dtjar修改path变量,加上这句%JAVA_HOME%\bin;检查JAVA环境是否配置好,进入CMD命令行,输入java或javac,可以看到好多的命令提示,说明成功了。

按照你的想法,在ListView前面的那个LinearLayout

应该为LinearLayout[1]\ListView[0],至于原因,想想数组的调用

xpath的获取,如果是网页端的很方便

用chrome, 选中你要获取的元素右键鼠标,审查元素。然后在开发者窗口中,定位到的代码处,右键鼠标,有个copy xpath,点击即可

在我们日常使用App过程中,经常会看到App界面有一些d窗提示(如下图所示)这样的提示框称之为Toast提示框,这些提示元素出现后等待3秒左右就会自动消失,那么我们该如何获取这些元素文字内容呢?

Appium 163开始支持识别Toast内容,主要是基于UiAutomator2,

因此需要在Capablity配置如下参数:

desired_caps['automationName']='uiautomator2'

安装appium-uiautomator2-driver: 安装命令如下:

cnpm install appium-uiautomator2-driver

安装成功后可以在 C:\Users\XXXX\node_modules看到对应的文件:

进入登录界面输入错误的用户名或者密码,获取Toast内容:

注意:Toast内容为中文时,顶部必须注释# coding=utf-8 否则会因为编解码导致文字识别失败。

两遍。

1、appium系统 *** 作时会给一个元素给定一个数组,在元素前系统会自动检测出自己需要的内容,两遍查找后就不会自动显示了。

2、目前要求系统其同一元素值查找的次数不要超过两次,超过两次就无法显示。

以上就是关于appium 怎么跳转页面定位元素全部的内容,包括:appium 怎么跳转页面定位元素、appium使用xpath定位元素并点击,为什么查找不到元素呢、appium元素定位(android)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9324995.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存