2016-08-17 73 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對象?我試過的東西通常是**(方法)**不是函數。我可以得到一個例子嗎? –