2017-06-21 59 views
0

在我的硒測試中,我需要找到具有特定值的輸入元素。如何使用XPath測試輸入值

<div id="product-list"> 
    <!-- ko foreach: $data.productItems --> 
    <div class="product-list-item"> 
     <input data-bind="value: $data.name"> 
    </div> 
    <!-- /ko --> 
</div> 

我硒測試使用下面的代碼來找到輸入元素具有特定名稱:

UI是由下面的代碼呈現

By xpath = By.xpath(".//div[@id='product-list']//div[contains(@class, 'product-list-item')]/input[@value='Product Name']"); 
WebElement element = browser.getWebDriver().findElement(xpath); 

的問題是,元素是自input[value='Product Name]"總是空將始終失敗,因爲在輸入中沒有「值」屬性。只有屬性「價值」,你可以通過它看到,例如Chrome中的「開發者工具」。

我有一些例子來研究爲什麼「價值」沒有正確處理。

jsfiddle example

是否有一些建議如何找到正確的輸入元素?或者至少說明如何處理值屬性vs值屬性?

EDIT1:更新例如

EDIT3:不是問題造成無法XPATH訪問DOM屬性,而且只能夠處理HTML(或任何其他XGML在input[@value='Product Name']

EDIT2固定失蹤@ )標籤結構及其屬性?由於淘汰賽僅將真實值推入DOM屬性,因此無法通過XPATH訪問。

+1

value屬性讓瀏覽器設置輸入的初始值,所以你不想嘗試通過它來選擇。使用硒來查找類product-list-item中的所有元素,並遍歷它們以獲得具有您關心的值的元素。或者執行JavaScript以返回具有所需值的元素。我認爲第一種方法更好。 –

+0

@BryanEuton屬性值僅用於初始值。這解釋了很多,謝謝。但迭代是不可能的。我只有一個單一的xpath必須返回節點(如果存在)。 –

+0

getWebDriver()應該有另一個名爲findElements的方法,它需要xpath選擇器 –

回答

0

您的XPath的最後一部分是不正確的:

/input[value='Product Name'] 

這意味着你正在尋找一個<input>它是value屬性等於Product Name

您要搜索的data-bind屬性改爲:

/input[@data-bind='value: Product Name'] 

檢索WebElement後,得到<input>的值(不是value屬性):

element.getAttribute("value") 
+0

[at] data-bind是knockout.js用於將數據模型綁定到html元素的特殊屬性,有許多相同的輸入只有它們的值不同,我不能遍歷它們來選擇正確的輸入這就是爲什麼我需要在xpath中使用@value –

0

我猜測,你犯了一些錯字或不知道這是否是故意的。您可以參考下面的代碼,看看是否有幫助

By xpath = By.xpath(".//div[@id='product-list']//div[contains(@class, 'product-list-item')]/input[@data-bind='value: Product Name']"); 
WebElement element = browser.getWebDriver().findElement(xpath); 
element.getAttribute("value"); 
+0

@ data-bind是knockout.js用於將數據模型綁定到html元素的特殊屬性,這是錯誤的方式,也是element.getAttribute(「價值「)不是一種前進的方式,我不需要價值,我只需要測試它。 –