2017-07-05 5 views
0

次の手順に進む前に、テキスト入力フィールドが特定の値を含むのを待つSelenium Webdriverテストがあります。私は価値があることを知っています(「町のオークラ」)、JavaScriptによって設定されています。私は次のC#コードを使ってみました:コンテンツに基づいて入力要素を選択するのにXPathを使用できません

new WebDriverWait(Driver, TimeSpan.FromSeconds(timeout)) 
    .Until(ExpectedConditions.TextToBePresentInElement(DpNumber, "Town of Oakura")); 

これは毎回タイムアウトしました。だから私はフィールドが更新されるのを待つためにXPathを試してみると思った。

new WebDriverWait(Driver, TimeSpan.FromSeconds(timeout)) 
    .Until(ExpectedConditions.ElementExists(By.XPath("//input[@id='DP_NUMBER' 
                 and text()='Town of Oakura']"))); 

どちらもうまくいかなかった。私はvalueが正しいことを確立することができる要素を拡張

<input id="DP_NUMBER" type="text" name="DP_NUMBER" 
    data-bind="textInput:DP_NUMBER" class="js-bound"> 

:Chromeでコンソールを使用すると、Iのように定義要素を識別するためにXPathを使用することができます。しかし、その内容に基づいて要素を特定するXPathの順列を見つけることはできません。

+0

表示されているエラーは何ですか?質問エリアのエラースタックトレースを更新してください。ありがとう – DebanjanB

+0

これはただ時間切れです - それは決して内容に基づいて要素を解決しません。 –

答えて

1

TextToBePresentInElementチェック値を使用してみてください。 getTextメソッドは、入力型の要素の空の値を返します。入力テキストの値が何らかの値になるのを待つ。以下の予想される条件を使用することができます。

new WebDriverWait(Driver, TimeSpan.FromSeconds(timeout)) 
    .Until(ExpectedConditions.TextToBePresentInElementValue(DpNumber, "Town of Oakura")); 

また、text()関数は入力ボックスに対して空を返します。だから我々はxpathでそれを使うことはできない。

+0

ありがとうございました。 –

1

あなたは、私がセレンのドキュメントから

+0

ありがとうございました –

0

text()='Town of Oakura'だけでなく、ExpectedConditions.TextToBePresentInElementこれをとっている

(new WebDriverWait(driver, TimeSpan.FromSeconds(timeout))).until(new ExpectedCondition<Boolean>() { 
     public Boolean apply(WebDriver driver) { 
      return driver.findElement("//input[@id='DP_NUMBER']").getText().length() != 0; 
     } 
    }); 

のようなものとして待機を書き換えることができ、完全一致を探しています。正確なマッチのように見えるかもしれませんが、スペースや特殊文字は結果をスローします。 GetTextメソッドを使用して要素にcontains

new WebDriverWait(Driver, TimeSpan.FromSeconds(timeout)) 
    .Until(ExpectedConditions.ElementExists(By.XPath("//input[@id='DP_NUMBER' and contains(text(), 'Town of Oakura')]"))); 
+0

ありがとうガイ私はその順列を試しました。 –

関連する問題