NoSuchElementException при использовании FindElementByAccessibilityId - PullRequest
0 голосов
/ 27 мая 2019

Я новичок в Appium, но с Selenium достаточно опытен.

Первое действие, щелкнув по элементу 'Nieuw', не доставляет проблем, появляется экран с четырьмя вариантами выбора.

После этого я пытаюсь щелкнуть элемент с идентификатором доступа 'Proefitmanager'. На рабочем столе Appium это не создает никаких проблем, но в тесте Appium я получаю исключение NoSuchElement. Я использую идентификатор, который предлагается на рабочем столе Appium, и мой код сопоставим с кодом, сгенерированным записывающим устройством Appium Desktop, хотя я использую 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 голосов
/ 28 мая 2019
  1. Прежде чем щелкнуть элемент «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
Затем выполните операцию щелчка по элементу proefit.

Вот пример кода на Java:

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

3. Затем вернитесь назад.в собственный контекст, чтобы продолжить тестирование.

driver.context("NATIVE_APP");
...