【问题标题】:WebDriver/Mocha Promise not returning what I expectWebDriver/Mocha Promise 没有返回我所期望的
【发布时间】:2016-12-24 09:05:09
【问题描述】:

我已经开始使用 Web Driver 和 Mocha 来学习测试,但我遇到了一些障碍。从

返回承诺时
driver.findElement(By.id('promo'))
.then(element => console.log(element))

我得到一个 WebElement 对象,它确实不是我想要的已解决承诺。 Web 元素对象为 { Object {driver_, id_} }。 我真的找不到任何可以帮助我理解 Web Driver 如何与 JavaScript 和 Mocha 一起工作的文档。

我运行这个测试只是为了返回承诺,它是唯一返回预期结果的测试

it('has the correct title', function(done) {
  driver.get('http://www.seleniumhq.org/projects/webdriver/')
   .then(() => driver.getTitle())
   .then(title => console.log(title))
   .then(() => done())
   .catch(error => done(error));
});

这将返回“Selenium WebDriver”,这是我希望我可以做出断言的结果。但是,我尝试的任何其他函数要么不是函数,要么返回 Web Element 对象。

【问题讨论】:

    标签: selenium webdriver promise mocha.js


    【解决方案1】:

    是的,这正是 WebDriver 的工作原理。当您要求它在页面中查找元素时,它会向浏览器发送查询以查找 DOM 元素。但是 DOM 元素不能按原样传递给您的脚本。考虑到您的 Selenium 脚本通常运行在与 DOM 对象(由 Selenium 控制的浏览器)完全不同的内存空间(此处为 Node.js)中。

    Selenium 所做的是为您提供 DOM 对象的表示WebElement。当你将它转储到 Node.js 中的控制台时,你只会得到 Selenium 创建的表示,而不是 DOM 对象。该表示包含一个内部 id(不要与 CSS id 混淆),它允许 Selenium 将其与 DOM 对象相关联,并且它具有一些簿记信息,但如果您执行 @,您将看不到任何与您看到的内容匹配的内容浏览器端的 987654324@ 带有 DOM 元素:你不会看到 parentNodechildNodesinnerHTML 等。

    您需要使用WebElement 上的方法来检查和操作相应的DOM 对象。或者,如果您需要做 Selenium 不允许您轻松完成的事情,您可以将其传递给 executeScriptexecuteScript 会自动将 WebElement 转换为浏览器端的 DOM 元素。

    【讨论】:

    • 究竟如何使用 WebElement 中的方法来检查和操作 DOM 对象?我尝试过的通常是 (method) 不是函数。我可以举个例子吗?
    猜你喜欢
    • 2021-05-30
    • 1970-01-01
    • 2021-12-11
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多