我正在为Android上的Hydrid App编写自动化测试。我有两个问题:
从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"
但找不到此元素且可点击?
所以我也尝试使用以下代码将上下文切换到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_APP
和WEBVIEW_<APP_PACKAGE_NAME>
。但是当我将上下文设置为webview
时,我收到错误:
"There is no such context"
有人可以帮忙吗?感谢
答案 0 :(得分:0)
混合应用程序意味着 - 通过组合Native App View和Web View构建应用程序。
但是一次只有一个视图可用Native或Web
如果视图是Native,那么您可以从UI Automator中检查元素。
如果视图是webview,则UI自动机不会显示任何层次结构。为此,您必须使用url - chrome:// inspect /#devices
在浏览器中进行检查在您的情况下,如果您使用类名,则表示您可以单击登录,但在使用resource-id时无法单击
可能有多个定位器具有相同的resource-id。请检查一次并确保使用可能是Xpath或类名等的唯一定位器