2013-01-06 86 views
0

我想使用Selenium測試我的GWT應用程序,通過GWT文本框生成的HTML代碼如下所示:如何從selenium webdriver獲取GWT文本框的值?

<input type="text" class="gwt-TextBox" > 

沒有價值存在,但是從UI我可以看到文本,有沒有一種方法來從硒獲得價值?

更新:我可以從硒找到input,但無法獲得它的價值,例如input以上的值是「blahblah ...」,我可以從頁面UI中看到,但無法從中獲得上面的html。

回答

0

每個控件都應該有一個用於硒測試的ID。這裏硒不能識別元素,而且你無法獲得UI上的價值。所以你必須爲輸入小部件設置ID。 即

TextBox textField= new TextBox();  
textField.getElement().setId("name"); 
+2

要設置僅用於測試的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) –

+0

感謝您的意見,但是也許我沒有沒有說清楚:我可以從硒驅動程序中獲取'input'元素,但是我無法獲取該值,即使從網頁上我也可以看到它的值。有任何想法嗎? – Mike

+1

@Mike它可能是WebElement問題。使用getAttribute而不是getText。 – iMBMT

1

@Bhumika是正確的,具有你想操作的每一個元素獨特的id屬性是良好的編程習慣。但是,如果您沒有這個功能並且無法添加它,那麼您仍然可以很好地處理這種特殊情況:placeholder屬性。要找到該元素,請使用XPath //input[@placeholder='Input note title...']。要獲取該字段的值,請獲取其value屬性。

1

像@BMT說,你應該使用的getAttribute值,這樣

GWT代碼

TextBox textField = new TextBox(); 
textField.ensureDebugId("textFieldId"); 

硒碼

driver.findElement(By.id("textFieldId")).getAttribute("value"); 

你可以看到所有屬性(或可見看不見的)一個元素使用瀏覽器的檢查元素工具(F12),然後得到你想要的值。

0

如果你想要得到的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"/>)。

更新屬性時,瀏覽器不會更新關聯的屬性。

相關問題