私のセレンテストでは、特定の値を持つ入力要素を見つける必要があります。XPathを使用して入力値をテストする方法
UIは、コードを次によってレンダリングされます。
<div id="product-list">
<!-- ko foreach: $data.productItems -->
<div class="product-list-item">
<input data-bind="value: $data.name">
</div>
<!-- /ko -->
</div>
マイSeleniumテストは、特定の名前の入力要素を見つけるために、次のコードを使用しています:
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]"
以来、常にnullであります入力に「値」属性がないため、常に失敗します。あなたはそれを介して見ることができるだけのプロパティ "値"があります。 Chromeの「デベロッパーツール」
「値」が正しく処理されない理由を調査するための例がいくつかあります。
適切な入力要素を見つけるためにどのようにいくつかのアドバイスはありますか?または少なくとも値の属性と値のプロパティを処理する方法を説明する?
EDIT1:固定input[@value='Product Name']
にEDIT2 @行方不明:更新された例
EDIT3は:DOMプロパティにアクセスできないことXPATHによって引き起こされる問題ではないとHTML(またはその他のXGMLを処理することができるだけです)タグ構造とその属性?ノックアウトは実際の値をDOMプロパティにプッシュするだけなので、XPATHから到達できません。
value属性を使用すると、ブラウザは入力の初期値を設定できるため、その中から試して選択する必要はありません。セレンを使用して、クラスproduct-list-itemのすべての要素を見つけ出し、それらを繰り返し、気になる価値のある要素を取得します。または、JavaScriptを実行して目的の値を持つ要素を返します。最初の方法は私の意見では良いです。 –
@BryanEuton属性値は初期値のみです。それは、多くの感謝を説明します。反復は不可能です。ノードを返さなければならない単一のxpathを使って1つのショットしかありません(存在する場合)。 –
getWebDriver()は、xpathセレクタをとるfindElementsという別のメソッドを持つ必要があります。 –