使用Appium在iOS本机应用的webview页面上找不到元素

时间:2015-03-04 21:20:28

标签: selenium-webdriver webdriver automated-tests appium ios-ui-automation

我有一个原生应用,可以打开很少的网页浏览页面。我在应用程序上运行appium,在Web视图页面上进行一些自动化测试,我需要向下滚动才能找到用户名和密码字段。我尝试了我可以在网上找到的所有建议,但它不起作用。有人可以帮忙吗? 我正在跑步: Appium v​​1.3.5 iOS 8.1

这是我的代码:

// switch to webview

Thread.sleep(6000);
final Set<String> contextNames = driver.getContextHandles();
for (final String contextName : contextNames) {
  System.out.println(contextName);
  if (contextName.contains("WEBVIEW")) {
    driver.context(contextName);
  }
}

Thread.sleep(6000);
WebElement x = driver.findElement(By.cssSelector("Username *"));
assertTrue(x.isDisplayed());

这是我尝试滚动并输入用户名

的元素
     <AppiumAUT>
       <UIAApplication name="Demo A" label="Demo A" value="" dom="" enabled="true" valid="true" visible="true" hint="" path="/0" x="0" y="24.125" width="375" height="642.1875">    
        <UIAWindow name="" label="" value="" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/2" x="0" y="0.6875" width="375" height="665.625">
        <UIAScrollView name="" label="" value="" dom="" enabled="true" valid="true" visible="true" hint="" path="/0/2/1" x="29.296875" y="40.53125" width="316.40625" height="548.4375">
            <UIAWebView name="" label="" value="" dom="" enabled="true" valid="true" visible="false" hint="" path="/0/2/1/0" x="29.296875" y="40.53125" width="684.375" height="1170.703125">
                <UIAStaticText name="Username *" label="Username *" value="" dom="[object Object]" enabled="true" valid="true" visible="false" hint="" path="/0/2/1/0/15" x="94.921875" y="783.5" width="92.578125" height="22.265625">
                </UIAStaticText>
                <UIATextField name="" label="" value="" dom="[object Object]" enabled="true" valid="true" visible="false" hint="" path="/0/2/1/0/16" x="94.921875" y="811.625" width="604.6875" height="46.875">
                </UIATextField>

以下是错误消息:

org.openqa.selenium.InvalidElementStateException: SyntaxError: DOM Exception   12 (WARNING: The server did not provide any stacktrace information)Command duration or timeout: 22 milliseconds

我尝试过以下操作并且不起作用:

  1. 首先使用driver.switchTo().window("WEBVIEW_1");
  2. 切换到窗口
  3. 使用driver.findElement(By.id("Username *"))
  4. 使用driver.findElement(By .xpath("//input[@name='Username *']"));
  5. 使用driver.findElement(By .xpath("//UIAApplication[1]/UIAWindow[3]/UIAScrollView[1]/UIAWebView[1]/UIAStaticText[14]"));
  6. 我还尝试先滚动它:

    1. 仅使用scollto: driver.scrollTo("Username *");
    2. `((JavascriptExecutor)驱动程序).executeScript(
      • &#34; arguments [0] .scrollIntoView(true);&#34;,driver.findElement(By.name(&#34; Username *&#34;)));`
    3. 错误消息是NoSuchElement或上面的消息。

      请帮忙!谢谢!

2 个答案:

答案 0 :(得分:1)

我会选择driver.findElement(By.xpath(“// UIAStaticText [contains(@ name,'Username')]”));实际上,可以首先在Appium Inspector中测试元素位置的所有搜索方法,看它们是否有效。

答案 1 :(得分:0)

如果您测试网络应用,则必须使用网页定位器。在这里查看我的答案(更正:)):Unable to find an element in Browser of the Android emulator using Appium and C#