使用FindElementByAccessibilityId时出现NoSuchElementException

时间:2019-05-27 14:21:07

标签: c# android appium nosuchelementexception

我是Appium的新手,但对Selenium很有经验。

第一个动作是,单击“ Nieuw”元素没有问题,出现带有四个选择的屏幕。

之后,我尝试单击具有辅助功能ID为“ Proefitmanager”的元素。在Appium桌面中,这没有问题,但是在我的Appium测试中,我遇到了NoSuchElement异常。我使用的是Appium桌面建议的Id,我的代码与Appium桌面的记录器生成的代码相当,尽管我使用的是C#而不是Java。

IWebElement nieuw = (IWebElement)driver.FindElementByXPath("(//android.view.View[@content-desc='Nieuw'])[2]");
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.ElementToBeClickable(nieuw));
nieuw.Click();

IWebElement proefrit = (IWebElement)driver.FindElementByAccessibilityId("Proefrit");
wait.Until(ExpectedConditions.ElementToBeClickable(proefrit));
proefrit.Click();

我的想法是,元素在单击时没有焦点,因为它在另一个框架中。我尝试使用SwitchTo()。Frame(0)和Frame(1),但这有如下例外:

Could not proxy command to remote server. Original error: 404 - undefined`

从Appium桌面查看图像以了解应用程序的外观。

enter image description here

1 个答案:

答案 0 :(得分:0)

  1. 首先,您需要先从Native View切换到Web View,然后再点击“ Proefit”元素。

以下是Java中的示例代码:

   Set<String> contextNames = driver.getContextHandles(); 
   for (String contextName : contextNames) {
     System.out.println(contextName); //prints out something like NATIVE_APP or WEBVIEW_1 
    } 
   driver.context(contextNames.toArray()[1]); // set context to WEBVIEW_1
  1. 然后对proefit元素执行单击操作。

以下是Java中的示例代码:

WebElement proefrit=driver.findElementByAccessibilityId("Proefrit");
wait.Until(ExpectedConditions.ElementToBeClickable(proefrit));
proefrit.click();

3。然后切换回本机上下文以继续测试。

driver.context("NATIVE_APP");