如何使用Driver Wait Before Text在selenium中
我正在尝试使用以下等待条件的驱动程序等待函数。
我想testing一个button上的文字是否等于/匹配 “ 注册 ”。 以下是我的代码:
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
我试图手动检索button上的文字
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:button确实存在,当我运行我使用铬驱动程序的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);
或创build一个预期的条件,将等待一个具有所需文本的元素:
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);