Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Appium仅在Cordova应用程序上显示本机应用程序上下文_Android_Cordova_Appium - Fatal编程技术网

Android Appium仅在Cordova应用程序上显示本机应用程序上下文

Android Appium仅在Cordova应用程序上显示本机应用程序上下文,android,cordova,appium,Android,Cordova,Appium,我在Windows上运行Appium,直接在Android设备上测试Cordova应用程序。但是,当我尝试获取上下文并切换到包含WEBVIEW(基本上是推荐的过程)的上下文时,它只返回一个上下文,NATIVE\u APP 当我使用inspector时,我能够看到一个WebView子项和附加到它的许多View子项,它们与应用程序中的每个元素相关。因此,尽管它没有在Webview模式下显示元素树,但我可以看到它使用的是Webview,但不知何故,它无法连接到特定的上下文 对此有何想法?您是否尝试强制

我在Windows上运行Appium,直接在Android设备上测试Cordova应用程序。但是,当我尝试获取上下文并切换到包含
WEBVIEW
(基本上是推荐的过程)的上下文时,它只返回一个上下文,
NATIVE\u APP

当我使用inspector时,我能够看到一个
WebView
子项和附加到它的许多
View
子项,它们与应用程序中的每个元素相关。因此,尽管它没有在Webview模式下显示元素树,但我可以看到它使用的是
Webview
,但不知何故,它无法连接到特定的上下文


对此有何想法?

您是否尝试强制选择webview?例如,在JAVA中:

driver.switchTo().window("WEBVIEW");

我也在测试cordova应用程序,它运行良好。

正常。我尝试了不同的功能组合,最后我找到了有效的组合。使用automationName,不要将platformVersion放入功能中

final File app = new File(appDir, "HybridSample.apk");
final DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
capabilities.setCapability("deviceName", "Android Emulator");
// capabilities.setCapability("platformVersion", "4.4");
capabilities.setCapability("automationName", "Selendroid");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("app", app.getAbsolutePath());
capabilities.setCapability("appPackage", "com.mcc.hybrid"); // Optional
capabilities.setCapability("appActivity", ".HybridSample"); // Optional
如果您检查服务器日志,也可以看到这一点可用上下文:本机应用程序、WEBVIEW\u 0

这意味着,您必须按如下方式切换上下文

for (final String contextName : contextNames) {
  System.out.println(contextName);
  if (contextName.contains("WEBVIEW_0")) {
    driver.context(contextName);
  }
}

请注意,以上设置适用于早于4.4的Android版本。如果您有KitKat或更高版本,只需删除automationName。使用automationName时,它将无法正常工作,因为它只返回本机应用程序作为可用上下文。

谢谢您的回答。我将在下周一检查它,我告诉你一些事情,但是它看起来很有希望,因为我使用的是
driver.context(contextName)
way当时看起来它正在工作。记住使用
Set contextNames=driver.getContextHandles()获取上下文句柄@Korcholis您使用哪种应用程序版本?