新手区 (新手求助!) 如何操作 APP 内容页中的 webview 元素

江海 · 2015年12月16日 · 最后由 zyr 回复于 2016年10月10日 · 3241 次阅读

如下图,我现在只能找到并操作上面的三个图标的元素,下面的 webview 页面完全无法操作。
我用 driver.context 读出来只有 NATIVE_APP,把这个参数传进 driver.switch_to.context("NATIVE_APP"),打印出来显示是 None
完全是新手自己研究,求各位大神指点!!

共收到 22 条回复 时间 点赞

好像需要让开发把 webview 的 debug 开启

driver._switch_to.context('WEBVIEW_xxxx')

我目前使用的切换方式 xxxx 是读出来的 webview 的名字,你在 appium 中直接浏览到这个页面打印的 driver.context 也是只有 nvtive 的吗,你可以试试,如果出现了 webview 的,可以直接使用。

请问你用的是什么自动化测试工具呢?

1.driver.context("webview")
2.file=driver.page_source 把 file 写入一个 html 文件中
3.然后打开 html,就可以像 web 端一样用浏览器插件查看其中元素了

#3 楼 @actionwind appium 啊

#2 楼 @ike 是只有 native 的,要是有 webview 的话,就好办了

#4 楼 @wxhhxx123 我试了,不行。关键是没有 webview 这个信息,用 driver.context("webview"),提示时 Unicode 对象不能被调用,更别谈写入文件了

#7 楼 @jh901011 你确定 webview 的 debug 开了?你确定 webview 是 android 4.4+ 系统的原生 webview ?没有这两个前提, webview 不会出现在 context 中。

#8 楼 @chenhengjie123 系统是 Android 4.4.2 原生的,但是请问一下,debug 模式怎么改?

我也是打印当前所有的 context,结果只有 NATIVE_APP,不知道怎么切换到 webview,help?

#9 楼 @jh901011 看看这里:
https://sites.google.com/a/chromium.org/chromedriver/getting-started/getting-started---android

留意这句:

ChromeDriver supports running tests on Chrome browser (version 30+) as well as WebView-based apps starting in Android 4.4 (KitKat) that have enabled web debugging and JavaScript.

江海 #12 · 2015年12月21日 Author

#11 楼 @chenhengjie123 我改成 debug 模式了,但是在 chrome 页面点击 inspect 后,还是显示不出来,请问怎么回事啊?

#12 楼 @jh901011 android 版本是?
你的截图里不是有一个 webview 了吗?

江海 #14 · 2015年12月21日 Author

#13 楼 @chenhengjie123 安卓 5.0.1 的

江海 #15 · 2015年12月21日 Author

#13 楼 @chenhengjie123 额,不需要在弹出来的框框里见到显示的内容么?

#15 楼 @jh901011 嗯,正常来说应该是能看到的。不过看你的截图还停在显示 template 阶段。

要不你拿另一个有 webview 的应用试试,看有没有问题?

@SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            WebView.setWebContentsDebuggingEnabled(true);
        }
        setContentView(R.layout.activity_main);
        webview = (WebView) findViewById(R.id.webview);
        WebSettings webSettings = webview.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webview.loadUrl("http://www.baidu.com");
        webview.setWebViewClient(new webViewClient());
    }

需要开发在测试的程序里,打开 debug 模式。

Set<String> contextNames = driver.getContextHandles();
for (String contextName : contextNames) {
    System.out.println(contextName);
}
Thread.sleep(5000);
driver.context("WEBVIEW_com.example.webviewapp");//根据print内容,填写你要测试context的名称
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("document.getElementById('index-kw').value='111'");
driver.findElementById("index-bn").click();
Thread.sleep(10000);
driver.context("NATIVE_APP");

测试程序可以这样写。

是不是 https 的?

#4 楼 @wxhhxx123 请问有具体的例子吗?可以贴一下吗,感激不尽!

江海 #20 · 2015年12月24日 Author

#17 楼 @memetea 我用的是 Python,不过还是谢谢你!

江海 #21 · 2015年12月24日 Author

#18 楼 @yuweixx 不是,是 http 的

#12 楼 @jh901011 我设置上了 if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {
System.out.println("开启 debug");
WebView.setWebContentsDebuggingEnabled(true);
}
但是我的 (Build.VERSION.SDK_INT 获取到位 0,我的真机是 android5.1.1 版本的

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册