我正在尝试使用带有以下wait condition的驱动程序等待功能。
我想测试一个按钮上的文字是等于/匹配" 注册"。 以下是我的代码:
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:按钮确实存在,并且在运行命令时可见 我正在使用chrome驱动程序 selenium nodeJS 实现。
答案 0 :(得分:3)
函数until.elementTextIs
采用了一个web元素,但是你提供了一个定位器。
要么等待元素,要么等待文本:
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);