我正在将Webdriver与Mocha结合使用。当我尝试使用“ document.getElementById”时,我最终收到“ ReferenceError:未定义文档”
我正在测试浏览器(不是无头)。
我发现的任何信息似乎都表明该问题在无头测试(即,在Node中)时发生,并且需要jsdom-global。我尝试安装它只是为了看看会发生什么。它摆脱了“ ReferenceError:未定义文档”错误,但是“ document.getElementById”最终将变为未定义(这是合理的,因为我正在测试浏览器中)
我是否纠正在测试浏览器时“应该”使用“ document.getElementById”的问题?
谢谢
注意:这仅是一种特殊情况。我知道这不是标准用法。
答案 0 :(得分:0)
如果您尝试使用硒自动进行浏览器测试,则不应使用document.getElementById。
通过ID属性查找元素。此定位器使用CSS选择器* [id =“ $ ID”],而不使用document.getElementById。 在这里查看更多 [https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_By.html]
(已更新,假设您正在进行浏览器测试,这是使用ID的Mocha的完整示例:
var webdriver = require('selenium-webdriver'),
By = webdriver.By,
until = webdriver.until;
async function test() {
var driver = await new webdriver.Builder()
.usingServer()
.withCapabilities({ browserName: 'chrome' })
.build();
await driver.get('http://www.google.com');
let searchField = await driver.findElement(By.id('lst-ib'));
searchField.sendKeys('webdriver');
}
describe('Describe test', function() {
this.timeout(50000);
it('Some test', function(done) {
test().then(function() {
done();
});
});
});
答案 1 :(得分:0)
如果要使用浏览器调用而不是Webdriver的方法,则需要使用executeScript。
在您的情况下,考虑到您会收到id作为参数,情况将是这样:
driver.executeScript(`document.getElementById("${elementId}")`);