如何使用驱动程序等待文本在硒中

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实现的命令时可见。

Flo*_* B. 5

该函数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)