Я пытаюсь использовать функцию ожидания драйвера со следующим условием ожидания.
Я хочу проверить, что текст на кнопке равен/соответствует " Зарегистрироваться ". Ниже приведен мой код:
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.
Функция 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);