2017-06-27 7 views
0

この問題を解決するのに役立つ人がいますか?セレンのウェブテストケースは、2回目のクリックイベントが原因で常に失敗します。エラーは、要素が表示されないことを示します。c#セレニウムウェブドライバのテスト

public void MyTestCase() 
{ 
    driver.Navigate().GoToUrl(baseURL + "/"); 
    driver.FindElement(OpenQA.Selenium.By.Id("ctl00_ContentPlaceHolder1_FlightSearchV6_txtFrom")).Clear(); 
    driver.FindElement(OpenQA.Selenium.By.Id("ctl00_ContentPlaceHolder1_FlightSearchV6_txtFrom")).SendKeys("CON"); 
    driver.FindElement(OpenQA.Selenium.By.Id("ctl00_ContentPlaceHolder1_FlightSearchV6_txtTo")).Clear(); 
    driver.FindElement(OpenQA.Selenium.By.Id("ctl00_ContentPlaceHolder1_FlightSearchV6_txtTo")).SendKeys("SOL"); 
    driver.FindElement(OpenQA.Selenium.By.Id("ctl00_ContentPlaceHolder1_FlightSearchV6_btnFlightSearch")).Click(); 
    WebDriverWait wait1 = new WebDriverWait(this.driver, TimeSpan.FromSeconds(10)); 
    wait1.Until((x) => 
    { 
     return ((IJavaScriptExecutor)this.driver).ExecuteScript("return document.readyState").Equals("complete"); 
    }); 

    driver.FindElement(OpenQA.Selenium.By.Id("ctl00_ContentPlaceHolder1_ucFlightOuterBox0_btnSelect")).Click(); 
} 
+0

あなたのコードに何が間違っているかを確認できるように、HTMLを共有してください。 – Monika

+0

ありがとうMonika私が実際にテストしているウェブページ [link](https://www.directflights.com.au/) To:syd、To:sinと入力してから「Search for flights」ボタンをクリックしてください 結果ページが読み込まれ、最初の結果の[今すぐ予約]ボタンをクリックする必要があります。 – OPositive

答えて

0

要素がされていない場合はwebdriverを、エラーもocccurs「見えない要素」としてFirefoxを使用している場合は0より大きい目に見えるブラウザ領域。最初に要素にスクロールする必要があるかもしれません。

Scroll to element with selenium

+0

はい、問題でした。私がクリックした要素は、ブラウザ領域では表示されませんでした。ありがとう。私はクロムブラウザを使用しています。 – OPositive

-1

最初のクリック後にThread.sleep(1000)を追加してみてください。コードはページを超えることができます。つまり、次のページが読み込まれる前に、ページが読み込まれるのを待ってから実際に開始できます。だから、それを見て "ああ、それはロード完了です"のようになり、次のページがロードされ始めます。

+3

私はこの回答に非常に同意しません(申し訳ありません)。強制的に 'Thread.Sleep'を実行することは非常に悪いことです。代わりに明示的/暗黙的な待機を使用することを検討してください:http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-and-implicit-waits –

+0

代わりにページの読み込みを待つための代替ですか?暗黙の待機タイマーを試しましたが、いくつかのWebサイトで失敗したのを見ました。 「IWebElement element = wait.Until( ExpectedConditions.ElementIsVisible(By.Id()));」を使用したとします。同じIDを持つ前のページに要素がある場合、「ああ、それはそこにあります」と表示され、時間を待つことはありません。たぶんあなたは準備ができていない状態が完了しないのを待っているかもしれないが、何か断続的なJavaScriptの失敗を見るかもしれない何かをすることができます。 –

+0

私はその経験もありましたが、Seleniumは時々ちょっとファンキーですが、基本的に各ナビゲーションの後にこのようなことをしました:https://stackoverflow.com/a/15124562/4607317 –

2

エラーは、クリックしている要素が表示されていないことを示しています。それはあなたが代わりに私がExpectedConditionsを使用して好む、document.readyStateを待つようにしようとしました表示されます。

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
IWebElement element = wait.Until(
    ExpectedConditions.ElementIsVisible(By.Id(<id-goes-here>))); 
element.Click(); 

ElementIsVisible要約:

要素がのDOMに存在することを確認するために期待ページと表示されます。可視性は、要素のみが表示されていないことを意味だけでなく、高さと幅を有する

関連する問題