2016-08-17 74 views
1

我已经开始使用Web Driver和Mocha来学习测试,但我遇到了一些障碍。当从WebDriver/Mocha Promise没有返回我期望的结果

driver.findElement(By.id('promo')) 
.then(element => console.log(element)) 

返回的承诺,我收到了WebElement对象,还真是不解决的承诺我想要的。 Web元素对象是{Object {driver_,id_}}。 我找不到任何能够帮助我理解Web Driver如何与JavaScript和Mocha协同工作的文档。

我跑这个测试只是返回的承诺,这是返回预期的结果

这将返回“硒webdriver的”,这是结果我希望我可以作出断言只有一个。然而,我尝试的任何其他函数都不是函数或返回一个Web元素对象。

回答

1

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

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

您需要使用方法上WebElement为了检查和处理相应的DOM对象。或者,如果您需要做一些Selenium不会让您轻松做到的事情,您可以将它传递给executeScriptexecuteScript会自动将WebElement转换为浏览器端的DOM元素。

+0

我到底该如何使用WebElement中的方法来检查和操作DOM对象?我试过的东西通常是**(方法)**不是函数。我可以得到一个例子吗? –