我想使用Selenium測試我的GWT應用程序,通過GWT文本框生成的HTML代碼如下所示:如何從selenium webdriver獲取GWT文本框的值?
<input type="text" class="gwt-TextBox" >
沒有價值存在,但是從UI我可以看到文本,有沒有一種方法來從硒獲得價值?
更新:我可以從硒找到input
,但無法獲得它的價值,例如input
以上的值是「blahblah ...」,我可以從頁面UI中看到,但無法從中獲得上面的html。
我想使用Selenium測試我的GWT應用程序,通過GWT文本框生成的HTML代碼如下所示:如何從selenium webdriver獲取GWT文本框的值?
<input type="text" class="gwt-TextBox" >
沒有價值存在,但是從UI我可以看到文本,有沒有一種方法來從硒獲得價值?
更新:我可以從硒找到input
,但無法獲得它的價值,例如input
以上的值是「blahblah ...」,我可以從頁面UI中看到,但無法從中獲得上面的html。
每個控件都應該有一個用於硒測試的ID。這裏硒不能識別元素,而且你無法獲得UI上的價值。所以你必須爲輸入小部件設置ID。 即
TextBox textField= new TextBox();
textField.getElement().setId("name");
@Bhumika是正確的,具有你想操作的每一個元素獨特的id
屬性是良好的編程習慣。但是,如果您沒有這個功能並且無法添加它,那麼您仍然可以很好地處理這種特殊情況:placeholder
屬性。要找到該元素,請使用XPath //input[@placeholder='Input note title...']
。要獲取該字段的值,請獲取其value
屬性。
像@BMT說,你應該使用的getAttribute值,這樣
GWT代碼
TextBox textField = new TextBox();
textField.ensureDebugId("textFieldId");
硒碼
driver.findElement(By.id("textFieldId")).getAttribute("value");
你可以看到所有屬性(或可見看不見的)一個元素使用瀏覽器的檢查元素工具(F12),然後得到你想要的值。
如果你想要得到的DOM看起來像
<input type="text" class="gwt-TextBox" value="myValue">
,你將不得不使用
textBox.getElement().setAttribute("value", "myValue");
,而不是
textBox.setText("myValue")
這是因爲setText
將只更新value
財產(即theDomElement.value = "myValue"
),其將不是更新value
屬性(即<input value="myValue"/>
)。
更新屬性時,瀏覽器不會更新關聯的屬性。
要設置僅用於測試的ID(並且不在生產中),請改用'ensureDebugId',請參閱https://developers.google.com/web-toolkit/articles/testing_methodologies_using_gwt和http://的結尾google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/user/client/ui/UIObject.html#ensureDebugId(java.lang.String) –
感謝您的意見,但是也許我沒有沒有說清楚:我可以從硒驅動程序中獲取'input'元素,但是我無法獲取該值,即使從網頁上我也可以看到它的值。有任何想法嗎? – Mike
@Mike它可能是WebElement問題。使用getAttribute而不是getText。 – iMBMT