appium元素定位工具(appium定位元素 工具)

本篇文章给大家谈谈appium元素定位工具,以及appium定位元素 工具对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

appium 怎么跳转页面定位元素

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

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

具体方法:

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

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

获取目标元素。

示例:

ListWebElement lis = driver.findElementsByClassName("android.widget.ImageView");//获取ImageView的所有元素

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

进阶:

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

public ListWebElement getAllImges(){

ListWebElement lis = driver.findElementsByClassName(AndroidClassName.IMAGEVIEW);

return lis;

}

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

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

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

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

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

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

示例:

ListWebElement lis = driver.findElementsByAndroidUIAutomator("new UiSelector().className("+"android.widget.ImageView"+").index(4)");

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

public ListWebElement getElementsByClassAndIndex(String classname,int index){

ListWebElement lis =null;

lis = driver.findElementsByAndroidUIAutomator("new UiSelector().className("+classname+").index("+index+")");

return lis;

}

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

示例:

ListWebElement lis = driver.findElementsByAndroidUIAutomator("new UiSelector().className("+"android.widget.ImageView"+").index(4).clickable(true)");

同样可以封装一个方法:

public ListWebElement getElementsByClassAndIndexAndClickable(String classname,int index){

ListWebElement lis =null;

lis = driver.findElementsByAndroidUIAutomator("new UiSelector().className("+classname+").index("+index+").clickable(true)");

return lis;

}

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

示例:

driver.findElementByAndroidUIAutomator("new UiSelector().index("+index+")");

同样得到一个方法

public WebElement getElementByIndex(int index){

return driver.findElementByAndroidUIAutomator("new UiSelector().index("+index+")");

}

appium使用xpath定位元素并点击,为什么查找不到元素呢

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

driver.findElementByXPath(

"//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.EditText[1]");

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

python uiautomator 怎么获得元素的text

元素定位主要介绍如何使用uiautiomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作。uiautiomatorviewer是android-sdk自带的一个元素定位工具,非常简单好用,使用uiautomatorviewer,你可以检查一个应用的UI来查看应用的布局和组件以及相关的属性。

一、启动uiautomatorviewer.bat

1.打开目录D:\androidsdk\android-sdk-windows\tools

2.双击启动,启动之后出现如下界面:

3.也可以使用命令行进行启动,cd到tools目录下,然后输入uiautomatorviewer.bat回车后启动服务。

二、连接手机

1.cmd打开输入adb devices,确认手记已连接

2.打开手机淘宝页面,让屏幕处于点亮状态

3.点击左上角的安卓机器人按钮Devices Screenshot按钮刷新页面

三、定位元素

1.移动鼠标到需要定位的元素上,如搜索输入框

2.右下角可以看到元素对应的属性

text:搭配新宠不能缺

resource-id:com.taobao.taobao:id/home_searchedit

class:android.widget.EditText

四、点搜索框

1.前面一篇启动app后休眠五秒,等待页面加载完成

2.通过id来定位到搜索框,然后点击

五、最终代码如下

# coding=utf-8

from appium import webdriver

import time

desired_caps = {

'platformName': 'Android',

'deviceName': '30d4e606',

'platformVersion': '5.0',

'appPackage': 'com.taobao.taobao',

'appActivity': 'com.taobao.tao.welcome.Welcome',

}

driver = webdriver.Remote('', desired_caps)

# 休眠五秒等待页面加载完成

time.sleep(5)

driver.find_element_by_id("com.taobao.taobao:id/home_searchedit").click()

六、元素定位

1.appium的webdriver提供了11种元素定位的方法,在selenium的基础上扩展了三个,可以在pycharm里面输入driver.find_element_by然后会自动匹配出来

2.多的三个:

driver.find_element_by_accessibility_id()

driver.find_element_by_android_uiautomator()

appium 怎么定位纯 HTML5 页面应用

如果是进行wap端测试

1、使用appium集成的chromeDriver。在手机端安装chrome浏览器,下载对应版本的chromeDriver,使用appium初始化Chrome浏览器相关设置,可以启动chrome,利用chromedriver实现自动化。

2、如果是内嵌webview,需要初始化driver后,利用driver.contexx("WEBVIEW_1"),进行切换到webview,进行元素定位或者自动化

3、其他方式,启动源生浏览器,但这种方式是将源生浏览器当做一个app来使用,可能启动activity不允许三方进行调用,这样会导致失败

Appium《元素定位和UiAutomator表达式》

一、常见属性的用法

二、通过截图就可以看到元素的属性,那怎么元素定位呢?

三、问题

xpath 相对定位:如果相对定位中这个元素是有 id 的,这个 id 是唯一的,xpath 定位中优先通过 id 来定位。

class 属性对应的值是元素类型(是一个文本视图工具),Web 自动化中元素类型代表 Input、image、button 这样的标签名。

「resource-id 是唯一的,但是在 App 页面中并不绝对唯一。大部分情况下是唯一的,小部分情况下是重复的。」

如果一个页面中,元素的样式非常像,那很有可能它们的 id 就是一样的。UIAutomator Viewer 这个自带的工具是不能看出这个 id 是不是绝对唯一的。

「假设 resource-id 是唯一的,用相对定位这样定位:」

和 Web 自动化一样的玩法: 元素类型[@属性名称=属性值]

这里的 class 不是 Web 网页中的 class 属性了,这里代表它的标签名和元素类型(它是一个图片、一个文字、链接还是一个按钮呢?学会区分)。

如果 resource-id 不是唯一的,那么上面那个表达式是不够的,还会追加到上层的 Linearlayout 、 RelativeLayout 、包括祖先里面的一些层级都会放进来。

如果没有安装“升级 uiaumatorview-添加元素定位”就只能靠自己来判断。看下其它和它长得很像、元素的格式、风格、样式、页面布局都和它一模一样的元素,看下各位的 id 是否全都是一样的。

如果用了“升级 uiaumatorview-添加元素定位”,可以根据它的表达式自己来判断。

任何一个元素一定会有个 class,因为它是一个类别。Linearlayout 是一样的,布局也是安卓的控件,所以也会有控件名称、控件类型。

以下这些东西只有 2 个值,False 和 True。

以上这些属性在很多情况下是没有用的,但是在关键的时刻是很有用的。

例如想筛选当前页面中可以滚动的元素,通过 scrollable 等于 True 来过滤。

和 Web 自动化一样的,都是通过元素属性来定位,而且比 Web 自动化简单。

App 中只支持 5 种元素定位方式。虽然继承了 Web 自动化的元素定位,它之所以继承呢,是用到了其中的一个部分。

1、通过 id 定位元素:resrouce-id

2、通过 ClassName 定位:classname

3、通过 AccessibilityId 定位:content-desc

4、通过 AndroidUiAutomator 定位

5、通过 xpath 定位

1、通过 id 定位元素:resrouce-id

2、通过 ClassName 定位:classname

3、通过 xpath 定位

有 find_element_by_id() 就有 find_elements_by_id()

可以找到多个,它的返回值一样是列表。它的返回对象一样是 Web element 。

在它的下面有个 find_element_by_id() 。它的方法和 Web 自动化是一样的。

虽然这里代表的是元素类型,但它同样是 class 属性。

这里有点区别,但是方法名还是没有区别的。这个 class 的属性其实没有多大用处,一个页面中肯定很多属性的值和它很像的。所以这种用法不多。

既然是类别,图片可能有好多种,输入框也有好多种,它代表的是一种元素的类型。

「Web 自动化中 xpath 定位是最常用的,但是 App 自动化中 xpath 是最不想用的。原因是它的效率太低了。」

「如果全部只用 xpath 定位,问题会比较大,能不用 xpath 就不用 xpath」 。

AccessibilityId 是移动端特有的定位方式。

这是之前看到的类,这个类当中除了继承了 Web 自动化之外,对于安卓有 2 种,其中一种是 ACCESSIBILITY_ID 。

如果通过这种方式定位,对应的方式就是:

此处应输入 content-desc 的值,但是这里是空的,所以不能通过它定位。

但是 find_element_by_accessibility_id() 是另外一种 id,代表它在当前这个页面中也是很独特的。只要它有值,基本上可以通过它来定位。

用的是安卓 UiAutomator 这个自动化框架中提供的元素定位方式。所以想用这种元素定位方式,就必须了解它到底是怎么做的。

UiAutomator 自动化库是 Java 语言写的,所以它的参数是 Java 代码。UiAutomator 自动化库提供了 text。而 「元素有文本内容就可以通过文本内容来定位。」

这个里面的参数就必须是 UiAutomator 当中提供的定位方式。UiAutomator 是 Java 实现的,那么它的定位类型肯定也是 Java 实现的。

UiAutomator 去定位元素的时候用的 UiSelector 类。Api 的官方文档:

Appium 中通过 driver.find_element 来找元素的,找到的结果对象是一个 WebEmemt 。

「但是括号里面,不同的定位类型你要输入不同的定位表达式。」

通过 UiSelector 找到元素,这是表达式。总有一个方法通过它来找吧?

那就是 UiObject。UiObject 对应到 WebEmemt。WebEmemt 有对元素的各种操作以及属性的获取。 「UiObject 就是 WebEmemt,有各种对元素的操作。」

通过 UiObject 对元素进行输入、点击等操作。

UiAutomator 是它自己的框架,所以对应的做了一套东西。UiSelector 这个类是用来表达元素定位的。UiAutomator 这里的参数就是 UiSelector 类定位表达式。

Public constructors 公共的构造函数,构造函数就是初始化函数。类初始化的时候,有时候 init 是有参数的,构建函数当中就告诉了你它有没有参数。

有的时候并不用一个变量去接收它。在 Web 自动化当中,直接 实例名称.方法 就可以了。

事实上只有一个变量,叫做 val。

清一色的返回值基本都是类本身。

如果是一个实例化对象,那它的返回值都是实例化对象。每一个实例化对象都可以有这么多方法。

.checkable(true) 返回值就是 new UiSelector() 。接下来可以通过别的方式组合起来。

「多种条件组合起来对元素进行定位。有些元素的 id 不是唯一的,但是文本是唯一的。可以纯粹通过文本,也可以 id 和文本一起定位。」

「人家这里是“字符串”,在 Java 中单引号和双引号是有区别的。如果在 Java 中是字符串,只能用双引号,不然就是报错。」

new UiSelector().checkable(true).resourceId(“保密”)

通过 2 个属性来定位的,一个是 checkable()。

一个是 resourceId()。两者都要满足才能符合我的定位表达。

匹配到正则表达式的元素也可以。

textstartswith:以什么开头的一个字符串。

如果你的文本很长,可以定义以什么开头,也可以实现部分匹配。只不过这个部分匹配是有要求的,必须以什么开头。

这 4 种方式都可以用的,参数全是字符串。

除了 text 是文本性质的,content-desc 也是文本性质的。

className:匹配一个控件的类型。

控件类型也属于控件的属性。大家都叫做控件,但是你叫这个名字,我叫那个名字。

UiAutomator 自动化库提供了各种属性。只要学会表达式,然后能自己判断用什么样的类型来定位就好了。

使用 UiAutomator 中的 UiSelector 类来处理元素定位。

new UiSelector().函数名称(“定位表达式”)

字符串是双引号,布尔值就不是双引号了。

实际上只通过 text 定位就可以了。除了它叫做”我的“,这个页面也没有别人叫做”我的“了。

「如果通过 id 定位、ClassName 定位、AccessibilityId 定位这前 3 种方式都没有让你唯一定位到元素,那就用第 4 种呀!」

第 4 种其实效率很高的,因为是人家框架自己的定位方式呀,都不需要转换。第 5 种 xpath 定位,写法其实和 Web 自动化的 xpath 定位的写法一样。xpath 能干的事,第 4 种方式就能全部搞定了。

以上 5 种都搞不定的情况下,就需要用坐标了。但是坐标不太稳定,除非实在没有办法了才用坐标,坐标比 xpath 还差劲。

一般的 app 都有 id,如果你测得 app 没有 id,那就去给开发提意见,把 id 加上。

app 自动化相对来说比较简单。如果把“uiaumatorview 升级版”装上了,所有的定位表达式就直接拷贝就好了。

「不需要调试也不需要考虑上下级关系,如果是比较规范的 app,通过 id 来定位就可以了。」

和 Web 自动化的写法一样。4 大属性都一样(点击、输入、获取元素的文本内容、获取元素的属性)。函数名称一样,操作方式也一样。需要等待,等待方法也和 Web 自动化一样。

一对(或一个)标签包含的范围:其实可以理解为元素为一个容器,而这容器里面包含了标签。

这里的一对标签: 就是开始和结束标签。

范围:就是从开始标签 到结束标签 下面那个矩形框架就是这里的范围。

Appium 的 bug 比较多,需要换个版本试下,不要装太老的或者最新的。隔 2-3 个版本换个试下。和操作系统也有关系,有时 win7 不行,win10 就可以。

在 cmd 命令行中启动 uiautomatorviewer.exe,命令行有的时候可以看出来是什么错误导致。一般是有冲突。还有看看你的安装包装全了没有,比如 jdk、环境变量有没有配置正确之类的。

appium元素定位工具的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于appium定位元素 工具、appium元素定位工具的信息别忘了在本站进行查找喔。

1、本网站名称:源码村资源网
2、本站永久网址:https://www.yuanmacun.com
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
源码村资源网 » appium元素定位工具(appium定位元素 工具)
您需要 登录账户 后才能发表评论

发表评论

欢迎 访客 发表评论