2016-05-26 8 views
3

Selenium WebDriverを使用してブラウザとやりとりするNightwatch.jsを使ってWebアプリケーションをテストしています。私のアプリでは、アイテムの名前によってのみ区別される動的に作成されたリストがあり、名前は<input>という値で表示されます。名前で商品を探す必要があります。文書構造のプロパティ値で要素を見つけよう

例HTML表現:

<div class="item"> 
    <input> <!-- current value: "first" --> 
</div> 
<div class="item"> 
    <input> <!-- current value: "second" --> 
</div> 
<div class="item"> 
    <input> <!-- current value: "first" --> 
</div> 

私は値secondで入力を含むdiv.itemを見つける必要があります。 <input>の値は、そのvalue属性の値と異なる場合があり、そのvalue、の値によって決定されること

注。私の場合、DOMはReactによって操作されるので、入力はvalue属性を全く持たないかもしれません。

Nightwatch(またはSelenium WebDriver API)でのプロパティの値で要素を見つける方法はありますか?

私はwebdriverをdocumentation上で見て、私が見る唯一の方法は、いくつかの重大な欠点を有しているexecutingカスタムJavaScriptコードは、(例えば表示されるように要素を待っているの独自の実装を必要とし、ナイトウォッチページオブジェクトと相互作用しない)です。私が見る限り、他のすべての方法はHTMLだけを見ることに関係しています(属性はで、の属性はではありません)。それは、属性値ではなく、プロパティ値で検索を実行して


だけinput[value=...]のようなセレクタを使用して、完全に明確にすること(CSS)または//input[@value=...](XPathが)、ないソリューションです。

+0

#/ api?view = webdriver.By.js)。 – alecxe

+0

@alecxe興味深い情報ですが、Nightwatch/WebDriver [実行](https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidexecute)と同じユーザビリティを持っているようです。 (引数と戻り値でWebElementsをDOMElementsとの間で双方向に変換することに注意してください。) – hon2a

+0

ええ、カスタムJSを実行する以外の方法はありません。 – alecxe

答えて

1

あなたはclass="item"で要素のリストを取得するには.elements()を使用して、各入力の値プロパティを取得するために.getValue()を使用して、すべての要素を反復処理することができます。目的の名前と一致する場合は、要素を返します。 FYI特定 `nightwatch.js`ないが、` protractor`固有溶液を新たに導入された[ `by.js`ロケータ(http://www.protractortest.org/を使用することができ

function getElementsByValue(xpathSelector, expectedValue, callback) { 
    const foundElements = []; 
    browser.elements('xpath', xpathSelector, ({ value }) => value.forEach(inputEl => { 
    browser.elementIdValue(inputEl.ELEMENT, result => { 
     if (result.value === expectedValue) { 
     foundElements.push(inputEl); 
     } 
    }); 
    }); 
    browser.perform(() => callback(foundElements)); 
} 
+1

ニース、あなたはポイントを取得します。私の質問は答えとして受け入れるにはあまりにも一般的ですが、それは 'value'のためにしか機能しません。私は少なくともそれを少しきれいにするでしょう。 – hon2a

+0

改善ありがとうございます:) – Raymond

関連する問題