2012-08-26 7 views
6

ウェブページの表示可能なコンテンツは、ページの入力要素の状態に依存することがあります(たとえば、 'Enter your university'は 'Job'フィールドで 'Student'ドロップダウンメニューボタンのようないくつかのページ要素をクリックしたとき)。私は、Selenium Webdriverを使用して、そのようなページ要素の依存関係を発見するプロセスを自動化しようとしています。最初のアイデアは、テキスト入力フィールドにいくつかのものを入力し、チェックされた/チェックされていないチェックボックスを設定し、いくつかのボタン/リンクなどをクリックし、ページ上の要素が出現/消滅したかどうかを確認することです。問題は次のとおりです。Webdriverを使用してページが変更されているかどうかを確認

  • ページ上の何かが表示されているかどうかを簡単に確認する方法はありますか?さて、私は、Webページの要素から{'visible'、 'invisible'}状態へのマップを各変更後に作成し、何かが変更されたかどうかを調べることができますが、この目的のために何か組み込まれていますか?

  • いくつかのボタンをクリックすると、別のページが読み込まれる可能性があります。私がテストしているページに留まりたいのですが、click()メソッドによって別のページが読み込まれ、

+0

セレンは、ユーザーが定義済みのワークフローをステップ実行するのに非常に役立ちます...このテストの目的は何ですか? –

答えて

1

あなたは、あなたの2番目の質問について

RenderedWebElement webElement=findElement(By.id("element_id")); 
webElement.isDisplayed(); 

を使用することを意味しますwebdriverをを使用したい場合は、あなたの最初の質問は、Java

Selenium selenium; 

selenium.isVisible("id=element_id"); // it will return boolean value whether the element is present or not 

での視認性をチェックするまあのため

我々ページのURLを取得してそれをexと比較することによって、別のページにリダイレクトしているかどうかを確認できますあなたのとれURLが期待されるURLと一致しない場合は、URL

WebDriver driver; 

driver.getCurrentUrl() // will returns the String value 

をpectedする)、あなたは二つの方法

1のために行くことあなたはセレンで開く機能を使って、もう一度期待されるURLを開く(または)することができますwebdriverをナビゲートする方法

driver.navigate().to("expected_url"); 

2)あなたは、ナビゲーション戻って使用することができます

driver.navigate().back(); 
+0

あなたはセレン1とセレン2の間で切り替える...それはひどいです –

+3

私はちょうどこれをやる方法を共有しました。あなたは好きな方法で行くことができます。 – Dhivya

+0

少なくとも、2つのフレームワークを使用していることを指摘してください。新しいメソッドにはisVisible(ロケータ)をよく更新してください。 –

5

質問2のDiviの答えは問題ありません。

webElement.isDisplayed(); 

をそれとも、前とイベント後のページのHTMLを比較することができます:パート1のために、あなたが言ったように要素が表示されているかどうかを確認することができます。

driver.getPageSource(); 

(各イベント後に変更された場合は、URLを確認することもできます)。

htmlのソースを取得する際の1つの問題は、イベントが最後のアクションの後にトリガーされ、完了していない可能性があり、htmlを同じままにしておくことです。

(Boolean) ((JavascriptExecutor)driver).executeScript("return jQuery.ready"); 
((JavascriptExecutor)driver).executeScript("return document.readyState").equals("complete"); 

それとも、jQuery.readyに似た別の機能を持つ別のJavaScriptフレームワークを使用している場合があります。これを回避するには、次の条件のいくつかをチェックすることができます。

Actions actionObject = new Actions(driver); 
actionObject.sendKeys(Key.TAB).perform(); 

それとも、JavaScriptを使用することができますあなたのような何かを実行することができるようにあなたがなど、フィールドの外にタブ移動、能動素子を変更した後

は、最後にあなただけのイベントでの問題を誘発するかもしれません(私は以下のコードをチェックしていないと私はHTMLの基本要素にwebElementを設定します)に設定します。

((JavascriptExecutor) driver).executeScript("arguments[0].focus();", webElement); 

これはあなたの最後を元に戻す可能性があるとして、私はbody要素をクリックしてwebdriverをを使用することをお勧めしません。クリック。私は完全のための質問2についてディビの答えを含めてい

私たちは、ページのURLを取得し、期待されるURLとそれを比較することで、それは別のページにリダイレクトされているかどうかを確認することができます

WebDriver driver; 

driver.getCurrentUrl() // will returns the String value 

ご期待URLが、あなたは二つの方法

1のために行くことで、あなたのとれURLが一致しない場合)あなたは、セレン(または)webdriverをのNavigateメソッドで開く機能を使って、もう一度期待されるURLを開くことができます

driver.navigate().to("expected_url"); 

2)あなたは、ジェームズの回答に基づいて、ナビゲーション

driver.navigate().back(); 
3

をバック使用することができ、そして我々のテストサイトでは、jQueryのを使用していないので、私のために働い以下:

public static class WebDriverExtensions 
{ 
    public static void WaitForPage(this IWebDriver driver) 
    { 
     WaitForPage(driver, 60, 200); 
    } 

    private static void WaitForPage(IWebDriver driver, int seconds, int waitFor) 
    { 
     while (!((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete")) 
     { 
      System.Threading.Thread.Sleep(50); 
     } 
     bool stillChanging = true; 
     int iterations = 0; 
     int maxIterations = (1000 * seconds)/waitFor; 
     string previous = ""; 
     string current = ""; 
     while (stillChanging && iterations < maxIterations) 
     { 
      current = driver.PageSource; 
      System.Threading.Thread.Sleep(waitFor); 
      stillChanging = (!previous.Equals(current)); 
      previous = current; 
     } 
    } 

    public static void Click(this IWebElement el, IWebDriver driver) 
    { 
     el.Click(); 
     driver.WaitForPage(); 
    } 
} 

何私のコードでは、el.Click()の代わりにel.Click(ドライバ)を呼び出しています。このメソッドは、ページの変更が停止した後に戻ります。また、あなたのページ上の何かを変更する可能性のある変更の前/後にpublic driver.WaitForPage()メソッドを呼び出すこともできます。ハードコードされた値は、変更のチェックの最大タイムアウトと期間が期待通りに機能するように変更する必要があります。 waitForを小さくしすぎると、変更が検出されません。それを大きすぎると、クリックするたびに長い時間待たなければなりません。

関連する問題