Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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
Java 使用Appium测试Android Webview的各种问题_Java_Junit_Android Webview_Appium_Selendroid - Fatal编程技术网

Java 使用Appium测试Android Webview的各种问题

Java 使用Appium测试Android Webview的各种问题,java,junit,android-webview,appium,selendroid,Java,Junit,Android Webview,Appium,Selendroid,我有一个混合应用程序,主要是一个网络视图。以下是基本测试的代码: @BeforeClass public static void setupAppium() throws MalformedURLException { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("appium-version", "1.5.3"); capabil

我有一个混合应用程序,主要是一个网络视图。以下是基本测试的代码:

  @BeforeClass
  public static void setupAppium() throws MalformedURLException {
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("appium-version", "1.5.3");
    capabilities.setCapability("platformName", "Android");
    capabilities.setCapability("platformVersion", "6.0");
    capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "AppiumTesterDevice");
    capabilities.setCapability("app", "/work/builds/unify/app/build/outputs/apk/app-debug.apk");
    capabilities.setCapability("appPackage", "com.company.unify");
    capabilities.setCapability("appActivity", "AdministerActivity");
    driver = new AndroidDriver<>(new URL("http://0.0.0.0:4723/wd/hub"), capabilities);
  }

  @Test
  public void CompanyUrlTest() {
    driver.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.EditText[1]")).clear();
    driver.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.EditText[1]")).sendKeys(companyserverUrl);
    driver.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[3]/android.widget.Button[2]")).click();
  }

  @Test
  public void SimpleTest() {
    driver.context("WEBVIEW_com.company.unify");
    WebDriverWait wait = new WebDriverWait(driver,20);
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".localPickerList")));
    driver.findElementByCssSelector(".localePickerList").click();
    driver.findElementByCssSelector(".SPANISH_PR").click();
  }
如果没有在appium选项中设置这个版本的Chromedriver,我会得到一个不同的错误(但是,当我没有指定Chromedriver时,我不知道它使用什么Chromedriver可执行文件)。这是一个错误:

Jan 27, 2017 3:02:39 PM org.openqa.selenium.support.ui.ExpectedConditions findElement
WARNING: WebDriverException thrown by findElement(By.cssSelector: .localPickerList)
org.openqa.selenium.NoSuchSessionException: no such session
在这两种情况下,它似乎都不允许我的webview加载。当应用程序加载webview时,代码仍在运行,这看起来很糟糕。为什么等待似乎没有起作用?这有关系吗

最后,如果我使用Android 5.1.1仿真器,会出现以下错误:

WebDriverException thrown by findElement org.openqa.selenium.WebDriverException: unknown error: Maximum call stack size exceeded

有什么想法吗?为此,我整天都在和谷歌较劲。

有了新的UIautomator,你就不需要将驱动程序切换到webview。它具有识别webView内部元素的内置功能

请更新您的Android SDK一次

WebView中的元素将在Android版本6.0+的UIAutomator中可见。但是,一旦您为Android 6.0+设备自动化了脚本,您就可以为低于6.0的Android版本使用相同的脚本

您还可以使用UIAutomator在Android 6.0+设备上查看webView中的元素


有关更多信息,请使用新的UIautomator参阅此

,您无需将驱动程序切换到webview。它具有识别webView内部元素的内置功能

请更新您的Android SDK一次

WebView中的元素将在Android版本6.0+的UIAutomator中可见。但是,一旦您为Android 6.0+设备自动化了脚本,您就可以为低于6.0的Android版本使用相同的脚本

您还可以使用UIAutomator在Android 6.0+设备上查看webView中的元素


有关更多信息,请参阅此

非常感谢。在我的谷歌搜索中,我没有发现任何迹象表明安卓6.0网络视图可以使用Appium实现自动化。这仍然很奇怪,我不能用另一种方式,但是哦,好吧。我使用这个方法运行了测试。接下来的问题是:除了xpath或内容描述之外,还有什么好方法可以获取web元素?如果我使用的是webview上下文,我可以使用css选择器(如果不是超级错误的话),这很好,因为我可以为测试用例设置特殊的选择器,并根据需要命名它们。我可以使用您的方法执行类似的操作吗?@Slims您可以始终使用xpath查找元素。Xpath是最好的方法。我总是用它。是的!您可以使用资源id、id、名称、文本、内容描述或索引来构造xpath。非常感谢。在我的谷歌搜索中,我没有发现任何迹象表明安卓6.0网络视图可以使用Appium实现自动化。这仍然很奇怪,我不能用另一种方式,但是哦,好吧。我使用这个方法运行了测试。接下来的问题是:除了xpath或内容描述之外,还有什么好方法可以获取web元素?如果我使用的是webview上下文,我可以使用css选择器(如果不是超级错误的话),这很好,因为我可以为测试用例设置特殊的选择器,并根据需要命名它们。我可以使用您的方法执行类似的操作吗?@Slims您可以始终使用xpath查找元素。Xpath是最好的方法。我总是用它。是的!您可以使用资源id、id、名称、文本、内容描述或索引来构造xpath。
WebDriverException thrown by findElement org.openqa.selenium.WebDriverException: unknown error: Maximum call stack size exceeded