Как дождаться возврата browser.driver.findElement

В настоящее время я тестирую все элементы на своем веб-сайте. Типичный поток:

  1. Загрузить веб-страницу
  2. Найти элемент
  3. Щелкните элемент

Моя установка использует операторы switch, чтобы выбрать правильный browser.driver.findElement для поиска нужного элемента.

Пример кода:

  switch (element_name) {

  case "red button":
  return browser.driver.findElement(By.id('redButton'));
  break;

Это возвращаемое значение затем используется с click() для щелчка по элементу .....

Моя проблема в том, что кажется, что элементы не могут быть последовательно найдены после загрузки веб-страницы. Я буду непоследовательно получать ошибки, в которых ссылка не может найти элемент или элемент не виден. Поэтому я ищу способ постоянно проверять, загружен ли элемент, а затем пытаться щелкнуть по нему. Я видел примеры с использованием EC.visibilityOf(), но похоже, что я не могу использовать с ним browser.driver.findElement.

Я провел много исследований и тестирования различных решений, но, похоже, ничего не помогло. Любая помощь или руководство будут оценены.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
357
3

Ответы 3

Вы можете использовать явное ожидание, пока не найдете элемент на странице, прежде чем щелкнуть. Вот пример кода для этого.

WebDriverWait wait= new WebDriverWait(Driver,<time in MS>);
wait.until(elementToBeClickableAt(By.xpath("<xpath of your element>")));
element.click();

более конкретно, я хочу подождать, пока он не станет видимым, я использую эти операторы переключения с getText (). Таким образом, щелчок на самом деле не является основной проблемой, это лицо, которое ищет элемент и не может его найти.

N. I. 17.04.2018 22:06

наряду с приведенной выше логикой вы также можете использовать wait.until (elementIsVisible (By.Id ("red-button")));

LoflinA 17.04.2018 22:24

элемент может щелкать только тогда, когда элемент виден, поэтому он должен работать. В качестве альтернативы вы можете попробовать ExpectedConditions.visibilityOfElementLocated (By. <your xPath>).

Auro Sarma 18.04.2018 00:43

Вы можете попробовать это ...

new WebDriverWait(driver,2000).until(ExpectedConditions.visibilityOfElementLocated(By.id('redButton')));
var el = element(by.id('redButton'));
var EC = protractor.ExpectedConditions;
browser.wait(EC.presenceOf(el), 30000).then(function(){
  return;
});

Другие вопросы по теме