Bob*_*ani 3 javascript selenium node.js selenium-chromedriver
我正在尝试使用具有以下等待条件的驱动程序等待功能。
我想测试按钮上的文本是否等于/匹配“注册”。以下是我的代码:
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)
Run Code Online (Sandbox Code Playgroud)
但是运行后出现错误:
C:\Users\bob\Documents\testElectron\node_modules\selenium-
webdriver\lib\promise.js:2626 Uncaught TypeError: element.getText is not a
function
Run Code Online (Sandbox Code Playgroud)
我尝试使用手动检索按钮上的文本
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);
});
Run Code Online (Sandbox Code Playgroud)
它有效,但我想使用等待条件。PS:该按钮确实存在并且当我运行我使用带有 chrome 驱动程序的selenium nodeJS实现的命令时可见。
该函数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);
Run Code Online (Sandbox Code Playgroud)
或创建一个预期条件,等待具有所需文本的元素:
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);
Run Code Online (Sandbox Code Playgroud)