2017-02-15 13 views
0

divが複数のテキストボックスとボタンを持つフォームでリロードするページをテストしています。しかし、divがリロードされた後、webdriverは画面上の要素を見つけることができません。私は別の待機を試みたが、それは要素を見つけることはありません。しかし、変更されていない要素(トップのnav要素)を見つけようとすると、それは問題なく見つけることができます。コンテンツがリロードされた後、Selenium Chrome webdriverが要素を見つけることができません

 Driver.Instance.FindElement(By.Id("igtxttxt_CAge")).Click(); 
     var wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(10)); 
     wait.Until(d => d.SwitchTo().ActiveElement().GetAttribute("id") == "igtxttxt_CAge"); 

divコンテンツをリフレッシュするときにできることはありますか?

エラーが受信されない:

そのような要素:{ "方法": "ID"、 "選択": "igtxttxt_CAgeを"} :

(セッション情報要素を見つけることができません。クロム= 56.0.2924.76)

(ドライバー情報:ヨーヨーでchromedriver = 2.27.440174

+0

ない、それはあなたの問題だかどうかわからが、常にトップに切り替えてください要素を検索したり、新しいフレームに切り替える前に driver.switchTo()。defaultContent(); – HedonicHedgehog

+0

@HedonicHedgehog - 私はそれを試みました。同じ結果。しかし、知って良い。 – webdad3

答えて

0

この質問に対する回答が見つかりました。私がロードしていたページがiFrameにロードされていることをドライバが含むHTMLコンテンツを見るまで、私は気づいていませんでした。

私はこのコードを追加したら:予想通り

Driver.Instance.SwitchTo().Frame("frame_Calculator"); 

はその後、私のコードの残りの部分は働いた:

 Driver.Instance.FindElement(By.Id("igtxttxt_CAge")).Click(); 
     ((IJavaScriptExecutor)Driver.Instance).ExecuteScript("$('#igtxttxt_CAge').trigger('focus')"); 
0

私が与えたシナリオでは、fluentwaitwebdriverwaitよりも良い候補だと思います。次のコードを試すことができます。そのようなものはすべてelement not found exceptionを無視し、webdriverが待機します。

FluentWait fluentWait = new FluentWait<>(webDriver) { 
    .withTimeout(30, TimeUnit.SECONDS) 
    .pollingEvery(200, TimeUnit.MILLISECONDS); 
    .ignoring(NoSuchElementException.class, TimeoutException.class) 
    .ignoring(StaleElementReferenceException.class); 
} 

あなたの要素がクリック可能または表示されるまで使用できます。

fluentWait.until(ExpectedConditions.visibilityOf(By.Id("igtxttxt_CAge"))); 
fluentWait.until(ExpectedConditions.elementToBeClickable(By.Id("igtxttxt_CAge"))); 

これが役に立ちます。ここにはwebdriverwaitとfluentwaitの間のdifferenceがあります。

関連する問題