Appium元素定位难点:混合式的native+webview

现在大部分app都是混合式的native+webview,对应native上的元素通过uiautomatorviewer很容易定位到,webview上的元素就无法识别了。

1.认识识webview

>用uiautomatorviewer定位工具查看app页面,发现页面上有些区域无法定位到,如下图左边红色区域,只能定位到这个大框框,红色框里面的元素是无法识别的。

>这时候可以查看元素属性,如右图它的class属性,上面写着WebView,那毫无疑问这种页面就是webview了。

2.、接触contexts

>.context的中文翻译是上下文环境,学过selenium的同学,也可以理解为句柄(handle),其实是一回事,反正知道是两个不同的环境就行了。

>.先获取页面是contexts环境,如下图红色区域,获取的是一个list列表:

NATIVE_APP:这个就是native,也就是原生的

WEBVIEW_com.xxxx :这个就是webview

>.当看到打印出来有下图两个,就说明获取到webview的context了(当然也有的app有坑,可能明明有webview,却通过contexts获取不到,这种需要特殊处理了)

获取webview的context

3.换到webview

>要想操作webview上的元素,第一步需要切换环境(跟selenium的切换iframe,切换handle思路是一样)

>切换方法:switch_to.context(参数是webview的context)

>由于第二步已经获取到contexts是一个list对象,取这个list的第二个参数就行,也就是contexts[1]

换到webview页面

4.切回native

>webview上操作完后,想回到native上操作,这时候需要先切回来,切回native有两个方法:

方法1:driver.switch_to.context("NATIVE_APP")   # 这个NATIVE_APP是固定的参数

方法2:driver.switch_to.context(contexts[0])      # 从contexts里取第一个参数

原文地址:https://www.cnblogs.com/kaola8023/p/11552452.html

时间: 2024-11-08 03:01:27

Appium元素定位难点:混合式的native+webview的相关文章

Appium元素定位难点:tap坐标定位不准确

tap用法 1.tap是模拟手指点击页面上元素语法有两个参数,第一个是positions,是list类型最多五个点,duration是持续时间,单位毫秒 tap(self, positions, duration=None): Taps on an particular place with up to five fingers, holding for a certain time 模拟手指点击(最多五个手指),可设置按住时间长度(毫秒) :Args: - positions - list类型

4、通过uiautomatorviewer实现appium元素定位

熟悉selenium自动化的小伙伴应该知道WebDriver 提供了八种元素定位方法: idnameclass nametag namelink textpartial link textxpathcss selector appium元素定位和WebDriver略微有些差异,具体差异在哪里,下面会具体介绍,在此之前,我们先打开uiautomatorviewer.bat(在sdk/tools路径下) appium元素定位一:通过 Id 定位 如上图所示resource-id 就是我们要找的 Id

Appium——元素定位

首先介绍两种定位元素的工具,appium自带的 Inspector 和 android SDK自带的 uiautomatorviewer 1.UIAutomator Viewer比较简单,在模拟器打开app后,打开它,选择 点击这个按钮,就会同步模拟器或真机界面 点击页面中的元素,在右下角会显示该元素的一些信息 2.Inspector(android) 使用inspector就比较麻烦了,先设置appium ①首先是android setting 第一次设置的时候 package和launch

appium元素定位

通过id定位 安卓里面的id即为resource-id driver.findElementById("com.tencent.mm:id/do") 或者 WebElement element = driver.findElement(By.id("com.tencent.mm:id/do")); 通过name定位 一般text为name WebElement el = driver.findElement(By.name("昵称")); 通过c

appium元素定位之AndroidUiAutomator

UIAutomator 元素定位是 Android 系统原生支持的定位方式,虽然与 xpath 类似,但比它更好用,并且支持元素全部的属性定位,定位原理是通过 android 自带的android uiautomator 的类库去查找元素 方法名:find_element_by_android_uiautomator('uiSelector 表达式') 该方法的参数为 UiSelector 类定位元素的表达式:new UiSelector().函数名称("定位表达式") 实例化一个 U

学习 APPIUM 元素定位 (JAVA)-xpath

表达式 1.xpath根据text内容查找元素 //view[contains(@text,"value")] //view[@text="value"]等 2.xpath根据content-desc查找元素 //view[contains(@content-desc,"value")] 3.xpath根据index查找元素 //view[contains(@index,value)] 4.元素顺序 //view/view[n]/view等 例子

appium 元素定位find_element_by_android_uiautomator方法使用

若appium中给定的方法无法满足你的需求,刚好uiautomator中的方法可以满足你的需求时,你可使用find_element_by_android_uiautomator来调用uiautomator中的方法来实现. appium底层文件webdriver中给出的说明如下: def find_element_by_android_uiautomator(self, uia_string): """Finds element by uiautomator in Androi

appium 元素定位

查找控件的方式: 1.通过id查找 self.driver.find_element_by_id("com.guokr.mentor:id/text_view_topic_title") self.driver.find_elements_by_id("")[0] 2.通过name查找 self.driver.find_element_by_name("推荐") 3.通过class_name查找 self.driver.find_elements

Appium解决native+webview混合型APP(公众号、小程序)切换webview后元素无法定位问题

问题:最近在做一个安卓+H5混合开发的APP自动化测试,发现在从native切换到webview后,元素仍然无法找到,报错:no such element 思路:于是思考webview会不会像web页面一样存在多个handles呢?用window_handles去取所有的handle,发现果然不止一个.接下来就要确定所要操作的元素具体在哪一个handle,使用switch_to_window(handle),如果可以找到我们需要的元素,说明元素在这个handle,就可以继续后面的自动化操作. 实