appium怎么查看web元素

appium怎么查看web元素,第1张

查找当前可用的上下文信息的时候,用如下代码:

contexts=selfdrivercontexts

for

cotext

in

contexts:

print

cotext

根据输出的信息,如果有WebView信息的时候,可以切换:

driverswitch_tocontext("WEBVIEW")

或是

drivercontext(“WEBVIEW”)

但是一直找不到WebView信息,如图二所示,此时就没有办法进行切换。

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

思路:因为没有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+")");

}

锁定解锁屏幕

driverlock(5)

将把当前应用放到后台 5 秒

driverbackground_app(5)

收起键盘

driverhide_keyboard()

启动 ACTIVITY

在当前应用中打开一个 activity 或者启动一个新应用并打开一个 activity 。 只能在 Android 上使用

driverstart_activity('comexampleandroidapis', 'Foo')

打开下拉通知栏 只能在 Android 上使用

driveropen_notifications()

检查应用是否已经安装

driveris_app_installed('comexampleandroidapis')

安装应用

driverinstall_app('path/to/myapk')

删除应用

driverremove_app('comexampleandroidapis')

摇晃 (SHAKE) 关闭应用

drivershake()

关闭应用

driverclose_app()

启动 (LAUNCH)

根据服务关键字 (desired capabilities) 启动会话 (session) 。请注意这必须在设定 autoLaunch=false 关键字时才能生效。这不是用于启动指定的 app/activities ————你可以使用 start_activity 做到这个效果————这是用来继续进行使用了 autoLaunch=false 关键字时的初始化 (Launch) 流程的

driverlaunch_app()

应用重置(相当于卸载重装应用)

driverreset()

列出所有的可用上下文 (CONTEXT)

context 可以理解为 可进入的窗口 。例如,对于原生应用,可用的 context 和默认 context 均为 NATIVE_APP

drivercontexts

列出当前上下文

drivercurrent_context

获取当前页面的源码(可以辅助元素定位)

driverpage_source

截图屏幕

driverget_screenshot_as_file(r'E:\img\img1png') # 截取整个屏幕

获取应用程序的字符串 (APP STRINGS)

driverapp_strings

给设备发送一个按键事件(KEY EVENT)(只限安卓)

driverkeyevent(176)

获取当前 activity。只能在 Android 上使用

drivercurrent_activity

模拟用户滑动(SWIPE)

driverswipe(start=75, starty=500, endx=75, endy=0, duration=800)

捏屏幕(PINCH) (双指往内移动来缩小屏幕)

driverpinch(element=el)

放大 (ZOOM)屏幕 (双指往外移动来放大屏幕)

driverzoom(element=el)

滑动 (SCROLL)到某个元素。从一个元素滚动到另一个元素

driverscroll(originalEl, destinationEl ) # originalEl - 要滚动的元素 destinationEl - 要滚动到的元素

设置元素的值

driverset_value(element=el,Val) # 设置 el 元素的值

推送文件到设备中去(PUSH FILE),推送文件需要转换为'base64'

获取/设置 appium 的服务器设置。

多个点点击(最多五个点)

drivertap([(100, 20), (100, 60), (100,100)], 500) # list 中的元组放 5 个点,500 表示按下 500ms

在我们日常使用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 否则会因为编解码导致文字识别失败。

两遍。

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

appium是当前移动平台上主流的自动化测试工具之一。appium是一个合成词,分别由“application”的前三个字母和“Selenium”的后三个字母组成。application为“应用”,我们一般把移动平台上的应用简称为App。Selenium是当前主流的WebUI自动化测试工具。appium与Selenium之间是有继承关系的。appium的寓意是:移动端的Selenium自动化测试工具。

安卓设备没有找到适合的方法,尝试用Appium Inspector,但是使用了当前最新的“AppiumForWindows-1231”没有看到这个属性,且Inspector在Windows下面非常的不稳定,很容易crash。真心期望Appium团队尽快解决这个问题

iOS设备倒可以用Appium Inspector获得

个人建议可以尝试先用view显示的文本作为name看是否能拿到该控件,按照我个人的经验一般都是会成功的,所以我很怀疑安卓上面控件的name是否就等于text。如果确实还是不行的话就只好放弃用name了。或者等待Appium后来的稳定的inspector发布后看是否可以获得控件的name。<喎�">

自动化测试不仅包括 *** 作流,还包括对 *** 作流结果的验证以及等待元素加载。

在实际应用中,我们常常会忽视页面跳转/加载等带来的延迟,这时去定位元素往往会报错,说定位不到这个元素。

这种情况我们就需要增加延迟,常用的方法有以下三种。

初学者最常用的sleep,这种方法使用简单,但添加多了之后程序运行效率低

效果:强制等待5秒

使用方法也比较简单,只需在开头设置一次即可,效率比强制等待高一点

效果:设置隐性等待5秒,当该driver要定位元素时马上去定位一次,如果定位不到则等待5秒再去尝试定位一次

这种方法笔者用的比较多,效率最高,程序运行比较流畅

需要先导入WebDriverWait类,并且在设置appium启动参数时添加参数'automationName': "UiAutomator2",

from seleniumwebdriversupportwait import WebDriverWait

效果:等待元素加载,默认每05秒去定位一次该元素,最多等待10秒,即如果该元素05秒就加载出来了,则只会等待05秒就会继续运行

我们通常将一个流程写成一个测试函数,而流程的最后往往伴随着提示消息,一般为toast消息,我们验证结果的惯用手法是抓取toast消息,验证是否正确。

这里也用到了上面的显性等待中的WebDriverWait

效果:等待页面上出现包括该条“toast消息”的元素,默认每05秒去查询一次,最多等待5秒

如果搜索的内容在页面上唯一,且没有报错,那就是成功找到该条消息,即流程成功执行。

如有错误请及时指出,谢谢!

如有问题请留言,我懂的必然会回复!

共勉。

以上就是关于appium怎么查看web元素全部的内容,包括:appium怎么查看web元素、appium 怎么跳转页面定位元素、appium(四) *** 作介绍等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9694434.html

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

发表评论

登录后才能评论

评论列表(0条)

保存