2016-04-18 57 views
0

在Firebug和其他DevTools中,您可以獲取與HTML元素對應的DOM屬性和值。使用Se提取DOM屬性值

如何使用selenium-java代碼提取這些值? 我曾試圖getAttribute(),但它似乎是工作僅針對HTML屬性而不是DOM屬性,如「價值」或「拼寫檢查」等

我去採取這種做法的原因是,與<input>關聯的值文本字段(下面的代碼段)是運行時生成的,並且使用Knockout將數據綁定到它。因此它不可能與標準方法,如getText()getAttribute("value")getAttribute("text")getAttribute("innerHTML")getAttribute("innertext")捕捉它們,等

HTML代碼段爲HTML元素:

<input class="form-control" type="text" style="cursor: text" readonly="readonly" data-bind="textInput: url"> 

Firebug's DOM panel displaying DOM properties of an <input> element

回答

0

按照Selenium documentation,只有getAttribute()功能,其描述如下:

獲取元素給定屬性的值。將返回當前值,即使在頁面加載後修改了該值。更確切地說,這個方法將返回給定屬性的值,除非該屬性不存在,在這種情況下,返回具有相同名稱的屬性值(例如,textarea元素的「value」屬性)。如果兩個值均未設置,則返回null。 ...

據此,getAttribute("value")應該返回DOM屬性值,以防沒有名爲value的HTML屬性。

如果情況並非如此,那可能是計時問題。即該值在Selenium被設置之前被讀取。

+0

嘗試在eclipse中的調試模式,以便我可以肯定它不是一個頁面同步問題。我等待頁面加載。 getAttribute(「value」)返回null,而當我檢查使用螢火蟲時,我能夠正確地看到「值」。淘汰賽js數據綁定是否必須做這件事? – Andy

+0

我不這麼認爲,因爲'value'屬性顯然是根據你的屏幕截圖正確設置的。所以,Selenium應該能夠讀取它。雖然我沒有使用Knockout.js,但肯定是這樣說的。 –

0

我知道這是一個老問題,但它可能給別人一伸手

使用此控制檯

$$("input.form-control").value 

,如果返回所需的你將有Javascript使用WebDriver執行即

driver.ExecuteScript("var data = arguments[0].value; return data;", (Element as RemoteWebElement) 
+0

請格式化您的答案。 –