使用Android Hydrid App的Appium无法识别元素

时间:2017-03-31 09:17:48

标签: java android automated-tests appium

我正在为Android上的Hydrid App编写自动化测试。我有两个问题:

  1. 从Appium Inspector中,我看到一个属性为

    的元素
    resource-id: login_button
    

    所以我点击此按钮

    androidDriver.findElement(By.id("login-button")).click();
    

    我收到此错误:

    "An element could not be located with..."
    

    当然如果我找到

    元素
    classname "android.widget.Button" 
    

    然后它的工作原理。我问开发人员,通常resource-id就像

    resource-id: <APP_PACKAGE_NAME>:id/login_button
    

    但他说,对于复合应用程序,他没有bundleID (APP_PACKAGE_NAME)。对于Hydrid APP我们没有bundleID这是正确的吗?为什么Appium Inspector可以看到

    "resource-id: login_button"
    

    但找不到此元素且可点击?

  2. 所以我也尝试使用以下代码将上下文切换到WEBVIEW

    Set<String> contextHandles = appiumDriver.getContextHandles();
    Map<String,String> hashMap= new HashMap<String,String>();
        for (String contextname : contextHandles){
            if (contextname.contains("NATIVE")){
                hashMap.put("native", contextname);
            } else {
                hashMap.put("webview", contextname);
            }
        }
        //webview 
        androidDriver.context(hashMap.get("webview"));
    

    contextHandles有2个值:NATIVE_APPWEBVIEW_<APP_PACKAGE_NAME>。但是当我将上下文设置为webview时,我收到错误:

    "There is no such context"
    
  3. 有人可以帮忙吗?感谢

1 个答案:

答案 0 :(得分:0)

混合应用程序意味着 - 通过组合Native App View和Web View构建应用程序。

但是一次只有一个视图可用Native或Web

如果视图是Native,那么您可以从UI Automator中检查元素。

如果视图是webview,则UI自动机不会显示任何层次结构。为此,您必须使用url - chrome:// inspect /#devices

在浏览器中进行检查

在您的情况下,如果您使用类名,则表示您可以单击登录,但在使用resource-id时无法单击

可能有多个定位器具有相同的resource-id。请检查一次并确保使用可能是Xpath或类名等的唯一定位器