【问题标题】: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 元素:你不会看到 parentNode、childNodes、innerHTML 等。

    您需要使用WebElement 上的方法来检查和操作相应的DOM 对象。或者,如果您需要做 Selenium 不允许您轻松完成的事情,您可以将其传递给 executeScript。 executeScript 会自动将 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
    相关资源
    最近更新 更多