Как использовать драйвер подождать, пока текст в селене

1

Я пытаюсь использовать функцию ожидания драйвера со следующим условием ожидания.

Я хочу проверить, что текст на кнопке равен/соответствует " Зарегистрироваться ". Ниже приведен мой код:

driver.wait(until.elementTextIs(By.css('body > div.site-wrapper > div > div 
> div.inner.cover > p:nth-child(3) > a.btn.btn-lg.btn-primary'),'Sign 
Up'),80000)

Но после запуска я получаю сообщение об ошибке:

C:\Users\bob\Documents\testElectron\node_modules\selenium-
webdriver\lib\promise.js:2626   Uncaught TypeError: element.getText is not a 
function

Я попытался восстановить текст на кнопке вручную, используя

var Button = driver.findElement(By.css('body > div.site-wrapper > div > div 
> div.inner.cover > p:nth-child(3) > a.btn.btn-lg.btn-primary'));
Button.getText().then(function(text){
 console.log(text);
});

и он работает, но я хотел бы использовать условие для ожидания. PS: Кнопка существует и видна, когда я запускаю команды, использующие реализацию selenium nodeJS с драйвером chrome.

Теги:
selenium
selenium-chromedriver

1 ответ

1
Лучший ответ

Функция until.elementTextIs принимает веб-элемент, но вы предоставляете локатор.

Либо дождаться элемента, а затем текста:

var buttonLogin = By.css('body > div.site-wrapper > div > div > div.inner.cover > p:nth-child(3) > a.btn.btn-lg.btn-primary');

driver.wait(until.elementTextIs(driver.wait(until.elementLocated(buttonLogin)), 'Sign Up'), 80000);

или создать ожидаемое условие, которое будет ждать элемента, который имеет желаемый текст:

var Condition = webdriver.Condition;

until.elementLocatedTextIs = function elementLocatedTextIs(locator, text) {
  return new Condition(
    'for element to be located ' + locator + ' with text ' + text,
    function(driver) {
      return driver.findElements(locator).then(function(elements) {
        return elements.filter(function(element) {
          return element.getText().then(t => t === text ? element : null);
        }).then(function(elements) {
          return elements[0];
        });
      });
    });
};

var buttonLogin = By.css('body > div.site-wrapper > div > div > div.inner.cover > p:nth-child(3) > a.btn.btn-lg.btn-primary');

driver.wait(until.elementLocatedTextIs(buttonLogin), 'Sign Up'), 80000);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню