2016-03-23 5 views
3

私はテストを作成するためにSelenium Java WebDriverを使用しています。私が自動化しようとしているテストは、次のとおりです: 1)CSS要素からURLを取得します。 2)その要素をクリックします(リンクです)。 3)開いているURLが期待どおりであることを確認します。Selenium Web Driverでリダイレクトする前にクリックされたURLが開かれていることを確認する方法はありますか?

開かれたURLが実際に手順1で取得したURLと同じ場合は、手順3は簡単です。ただし、最終的に開かれるまで私のケースのURLがリダイレクトされるため、テストケースが失敗します。

私の現在の実装:「私をクリックした後

public void click(String selector) { 
    driver.findElement(By.cssSelector(selector)).click(); 
} 

3):

public String getHrefFromElement(String selector) { 
    return driver.findElement(By.cssSelector(selector)).getAttribute("href"); 
} 

2)私は、セレクタ上でこのメソッドをクリックしてください: 1)この方法で私は、URLを取得します現在のURLを取得し、#1で取得したElementからHrefを現在のURLと比較するための基本アサーションを作成します(失敗する)。

public String getCurrentURL() { 
    return driver.getCurrentUrl(); 
} 

質問: URLをクリックした場合は、リダイレクトされる、私は何とかリダイレクトURLは前にオープンされたことを確認することができますか? リダイレクト前のページが読み込まれる前に、最初からURL状態を取得できますか?

答えて

0

ページが読み込まれている(リダイレクトが完了している)ことを確認するには、待機を追加する必要があります。

これを簡単に抽象化するのに役立つように、テストへのページオブジェクトパターン/アプローチについて少しお読みになることをお勧めします。

+0

の例を取っ​​て私の答えを提示しているの下に、あなたは次のように試すことができます私が確認したいですリダイレクトする前ではなく、リダイレクトが完了した後ではありません。このコメントで提供された情報は非常に一般的なものなので、可能であれば詳細を教えてください。 – infimum

+0

これを行う方法はありません.Seleniumは、ブラウザが通常そうするように動作します。サーバがリダイレクトヘッダで応答すると、中間ページをロードせずにリダイレクトに直接従います –

0

ウィンドウURLにイベントリスナーを追加する必要があります。そのように変更するたびに、コード内の格納された値と比較することができます。

0

上記のコメントは正しいです、私はそれに多くの情報を追加したいと思います。

あなたのコードにリスナーを追加しようとすると、この問題で多くのことが助けになります。

私はC#でテストを実行するので、Javaのすべてのことを実際には分かっていませんが、これがあなたに役立つことを願ってhttps://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/support/events/EventFiringWebDriver.html。あなたがする必要がどのような

あなたは、このような「要素のClicked」と「ナビゲーション」などのイベントリスナーを追加しますと

がこれを持つなどの「要素が見つかり、」あなたがすることができますクラスを作成することです「ナビゲート」イベントでいくつかのアクションを実行します。あなたがナビゲートしているURLを取得するのに役立ちます。 C#私のリスナーに

は、次のようになります。

public static void Navigating(object sender, WebDriverNavigationEventArgs e) 
{ 
    Console.WriteLine("Will navigate to " + e.Url); 
} 
0

私はGoogleのホームページ(検索ページ)

import java.util.List; 
import java.util.concurrent.TimeUnit; 

import org.omg.Messaging.SyncScopeHelper; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.chrome.ChromeDriver; 

import junit.framework.Assert; 

public class WalmartDatePicker { 

    @SuppressWarnings("deprecation") 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     System.getProperty("webdriver.chrome.driver","C:\\Users\\rajnish\\Desktop\\ImpFolder\\SeleniumJar\\chromedriver_win32 (1)"); 
     WebDriver driver = new ChromeDriver(); 
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 

     driver.get("https://www.google.com"); 

     // finding all urls on the google home page : 

     List<WebElement> alllink = driver.findElements(By.tagName("a")); 

     for(int i = 0 ;i<alllink.size();i++){ 
      // printing links present on th egoogle home page. 
      if(alllink.get(i).isDisplayed() == true){ 
       String urlp = alllink.get(i).getAttribute("href"); 
       System.out.println("Links are : " + urlp); 
       // now click link one by one 
       alllink.get(i).click(); 
       // after clicking we move to the url 
       // here we can do two things to verify 

       // 1. verify title of the page and navigate back. 
       /* System.out.println(driver.getTitle()); 
       Assert.assertEquals(driver.getTitle(), driver.getTitle()); 
       driver.navigate().back();*/ 

       //2 verify before url with current opened url 
       Assert.assertEquals(urlp, driver.getCurrentUrl()); 

       alllink = driver.findElements(By.tagName("a")); 
      } 
     } 
    } 
} 
関連する問題