我正在尝试为我编写的Node.js Web应用程序设置一个Selenium测试套件。但是,在编写特定测试之前,我需要确保可以完全使用Selenium。我已经从测试编写退了一步(尽管其中有些导入等仍在我的代码中),并且一直在遵循本教程:https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Your_own_automation_environment
当我运行以下代码时,Selenium将启动一个窗口,并按照指示在Google的搜索栏中键入“ webdriver”。但是,除sendKeys()
以外,其他命令似乎均未执行任何操作。没有单击该按钮,该表单也未通过其他任何行提交。
如果我注释掉中间两行await
,那么第二行sendKeys
将执行并以这种方式提交搜索,否则它必须永远挂在它们上面。我无法解决的事情是为什么某些方法可行,为什么有些方法似乎导致无限期的等待。我什至尝试过简单地复制粘贴上面的Mozilla教程并运行它,但是即使使用.then
而不是await
,也会发生相同的问题。
任何见识将不胜感激!
编辑:我尝试用Java编写相同的脚本,并且一切正常。但是,我仍然希望将它们包含在js中,以便与Node.js应用程序打包变得更加容易。
const webdriver = require('selenium-webdriver'),
Builder = webdriver.Builder,
By = webdriver.By,
until = webdriver.until;
const chrome = require('selenium-webdriver/chrome');
const chai = require('chai');
const expect = chai.expect;
const chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
process.on('unhandledRejection', () => {});
let driver;
(async function doTests() {
try {
describe ('Test that login with sample user works', async function () {
this.timeout(20000);
// let driver, page;
driver = new Builder().forBrowser('chrome').build();
await driver.get('http://www.google.com');
let searchBox = await driver.findElement(By.name('q'));
await searchBox.sendKeys('webdriver');
await driver.findElement(By.name('btnK')).click();
await driver.findElement(By.name('q')).submit();
await searchBox.sendKeys(webdriver.Key.ENTER);
});
} catch (ex) {
console.log (new Error(ex.message));
} finally {
}
})();```