在使用 Appium 进行对 Android 系统 4.4.2 版本的 App 进行测试时,使用 driver.context("WEBVIEW"); 切换到 webview 模式是,总是提示:io.appium.java_client.NoSuchContextException: No such context found. (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 79 milliseconds; 我发现在 4.4.2 版本下使用 DDMS 查看 App 时,该 activity 不是 webview,而在另外一个 htc 手机中(无法查看 Android 系统版本)是 webview,求解~!前置条件如图:
建议你先看一下 driver.getContextHandles()
返回的 webview 名称是什么。切换 context 时 context 名称必须是使用前面方法返回的名称。这个名称是 appium 生成的,不是自己可以随便定义的。
#1 楼 @chenhengjie123
System.out.println(driver.getContextHandles());看了,是 [NATIVE_APP],这个是在 Android 4.4.2(三星 Note3)和 4.2.2(红米 Note)系统上出现的,但是在 HTC 手机上,是 [WEBVIEW],奇怪的是在同样的 App,同样的页面,HTC 是可以切换到 WEBVIEW 页面,而其他的两个却不能 ...
#1 楼 @chenhengjie123
补充一下,因为 HTC 的系统版本是受保护的,所以看不到到底是什么版本的 Android 系统,所以... 郁闷~!
据我所知,切换 webview,4.3 以下是不行的,但是 4.4 应该是可以的,你可以试一下 4.4 系统的虚拟机,我之前用真机一直也是提示
#2 楼 @wuaini2006 那就是 appium 获取不到 webview 了。
如果获取到的话,应该有一个带有 WEBVIEW 字眼的值。
获取不到的原因可能有:
1、系统不是 4.4 及以上(4.4 以下的 webview 没有使用 chrome 内核,appium 只有在 selendroid 模式下支持)
2、使用的不是系统的 webview 。webview 内核可以有很多的,而且很多应用(例如微信)出于兼容性或者其他原因会使用第三方内核(微信用的是腾讯自家的 QQ 浏览器内核)。但 appium 目前只支持系统内置的 webview 。
3、应用没有开启 webview 的 debug 选项。在模拟器上由于使用的是开发版系统,所以默认是打开了 debug 的,但真机除了亲儿子基本默认都关闭,需要增加代码来打开。详细可以看官方文档:https://developer.chrome.com/devtools/docs/remote-debugging#debugging-webviews
另外,要看 android 系统版本的话装个看系统信息的 app 就能看到了吧?
#4 楼 @cy_suncheng
我查看了一下 HTC 的系统是 Android 4.4.4,三星 Note 3 的系统是 Android 4.4.2,4.4.4 的系统是可以的,4.4.2 的系统就不可以....
#5 楼 @chenhengjie123 分析很到位 晚上试试 4.4 以上的模拟器 多谢
关注。。。
当我切换到 webview 我用什么定位元素呢,还是 ui 那个软件吗
#9 楼 @yang420097009 切换到 WebView 后,用原来的工具是不行的,你可以采取以下方式:
(1)动手,使用 driver.getPageSource() 获取页面资源;
(2)动嘴,和开发直接要内嵌的地址;
之后使用 Selenium 获取元素的方式即可
头像,头像,头像!
http://www.cnblogs.com/tobecrazy/p/4905917.html
Android 4.4 以上 webview 直接可以识别
#5 楼 @chenhengjie123 我加上
if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);}
但是我的 Build.VERSION.SDK_INT 为 0,怎么办呢?
#13 楼 @bigpig_zyr 我获取到的也是为 0, 实际上应该是 21 才对, 请问你解决了吗?
没有