这是一个承诺错误? 提交成功login后,Selenium-webdrivertesting无法find元素

我已经写了下面的testing,使用seleniumwebdriver。 (摩卡和柴也有一些设置,但是我还没有开始工作。)

我的问题是,testing运行到我希望它等待页面加载的位置,并findID为“usergreeting”的元素,其中包含文本“Welcome”+用户名。 此时,testing会抛出错误: Uncaught NoSuchElementError: Unable to locate element: {"method":"id","selector":"usergreeting"} Command duration or timeout: 986 milliseconds

不过,我可以看到(看着Firefox浏览器的步骤)页面已经加载并显示'#usergreeting'元素。

我不知道我做错了什么,但是我显然做错了。 我可能没有把握整个承诺的概念。 (请参阅我写了driver.wait()语句的部分。)

谢谢你的帮助。

 var assert = require('assert'), fs = require('fs'), webdriver = require('selenium-webdriver'); require('mocha-as-promised')(); var chai = require('chai'); var chaiAsPromised = require('chai-as-promised'); chai.use(chaiAsPromised); chai.should(); describe('Login test', function() { var driver, configObj, username, pwd; this.timeout(6000); before(function(done) { driver = new webdriver .Builder() .usingServer('http://localhost:4444/wd/hub') .withCapabilities( {browserName: 'firefox'} ) .build(); configObj = require('../test/config.json'); username = configObj.testuser; pwd = configObj.testpass; done(); }); it('User should be able to login', function(done) { driver.get('http://127.0.0.1:5207/Login.php'); driver.findElement({id: 'UserNameEdit'}).sendKeys(username); driver.findElement({id: 'PasswordEdit'}).sendKeys(pwd); driver.findElement({id: 'LoginBtn'}).click(); driver.wait(function() { return driver.findElement({id: 'usergreeting'}).innerText; }, 3000) .then(function(value) { assert.equal(value, 'Welcome, ' + username); done(); }); }); }); 

我认为问题是在你的等待语句,这是一个轮询函数,它调用findElement将返回一个NO_SUCH_ELEMENT错误代码,这在webdriverjs也是一个断言,该元素存在。

您需要调用driver.isElementPresent()函数,一旦元素出现,您可以调用findElement函数来获取它,所以请尝试如下所示:

 var locator = By.id('usergreeting'); driver.wait(function () { return driver.isElementPresent(locator); }, 3000); driver.findElement(locator).getText().then(function(txt) { assert.equal(txt, 'Welcome, ' + username); });