Appium:如何从基于离子的混合应用程序获取WEB_VIEW?

时间:2016-12-23 11:17:54

标签: android selenium ionic-framework webview appium

我使用离子框架开发了一个混合应用程序。现在是时候测试我的应用了,所以我选择了appium来自动化它。我已经准备好appium设置,我的设备安装在我的设备中,通过USB连接。

我编写了一个示例测试来点击登录按钮并将密钥发送到必需的字段,如电子邮件和密码。我曾使用uiautomatorviewer查找带有id的元素。 例如:driver.findElement(By.id("io.mysoft.testapp:id/login")).click();

到目前为止,一切都很清晰完美,但我的样本测试未能显示

等错误
FAILED: Loginforsample
org.openqa.selenium.NoSuchElementException: An element could not be located on the page using the given search parameters. (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 5.51 seconds

经过长时间的研究,我发现我们必须通过driver.context("WEB_VIEW");在测试逻辑中切换到WEB_VIEW。我还尝试使用以下代码获取WEB_VIEW:

Set<String> contextNames = ((AppiumDriver) driver).getContextHandles();
        for (String contextName : contextNames) {
            System.out.println("FIRST" + contextNames);//output is //NATIV_APP
            ((AppiumDriver) driver).context(contextName);     
        }

我只从阵列中获取NATIV_APP但没有打印WEB_VIEW。我已经研究过,为了启用WEB_VIEW调试,我们必须在webView类上调用静态方法setWebContentsDebuggingEnabled,这样我们就可以在webView上查找元素并对其进行清晰测试。

我是一名角色开发人员,我选择离子来开发混合应用程序。我的应用程序中没有类或任何内容,即编码时没有java。吃掉我脑子的问题是如何在我的离子应用程序(混合)中启用setWebContentsDebuggingEnabled有没有办法从离子混合应用程序中获取web_view?我认为这是我的测试失败的主要原因。请任何人都有解决方案。过去一周我一直在研究这个问题。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您需要在Android应用中启用 setWebContentsDebuggingEnabled 。请参阅此link以在Android应用中启用。

此外,一旦获得WEB_VIEW,您就可以直接在Web View中查找元素。为此,您需要更新Android SDK。最新的UIAutomator具有内置功能,可以在不切换上下文的情况下查找Web视图中的元素。

您需要具有OS版本6.0+的Android设备才能自动执行脚本,并且在自动执行脚本之后,您可以将其用于OS版本低于6.0的设备。

我已经回答了类似的问题 here。你可以参考这个。

我希望这会有所帮助:)