2012-02-26 15 views
5

私は複数のブラウザでforループを通して同じテストを実行しようとしていますが、常にFirefoxでのみ実行されます。selenium webドライバを使用して複数のブラウザでテストを実行

bros = ['FIREFOX','CHROME','INTERNET EXPLORER'] 

for bro in bros: 
    print "Running "+bro+"\n" 
    browser = webdriver.Remote(
        command_executor='http://10.236.194.218:4444/wd/hub', 
        desired_capabilities={'browserName': bro, 
              'javascriptEnabled': True}) 
    browser.implicitly_wait(60000) 
    browser.get("http://10.236.194.156") 

興味深い一つの観察;パラメータplatform: WINDOWSを含めると、Internet Explorerでのみ実行されます。

Selenium Webdriverはこのように動作しますか、それとも私の理解が間違っていますか?

答えて

6

私は実際には、Javaで次のようにこれを行ってきたが、私に適しています:

... 
import org.openqa.selenium.remote.DesiredCapabilities; 
import org.openqa.selenium.remote.RemoteWebDriver; 
... 

DesiredCapabilities[] browsers = {DesiredCapabilities.firefox(),DesiredCapabilities.chrome(),DesiredCapabilities.internetExplorer()}; 
    for(DesiredCapabilities browser : browsers) 
    { 
     try{ 
      System.out.println("Testing in Browser: "+browser.getBrowserName()); 
      driver = new RemoteWebDriver(new URL("http://127.0.0.1:4444/wd/hub"), browser); 
      ... 

あなたは異なる言語でテストを書いている場合はもちろん、これを適応する必要がありますが、私はそれが可能だ知っていますJavaでは、それ以外のことについてはわかりません。

また、私はあなたがやろうとしていることに同意します。何度もコードを繰り返し複製するのではなく、さまざまなブラウザで同じテストを実行するクラスを持つ方がはるかに良いと思います。Java /その他のコードでこれを行う場合は、Page Objectを使用することを強くお勧めします。

幸運を祈る!

+0

ありがとう、私は同様の方法で試して、進行状況を更新します。 :-) – pprakash

+0

あなたは同じブラウザの複数のインスタンスを実行しようとしましたか?私はクロムを試していますが、失敗していますが、私のコンストラクタは新しいChromeDriver()で始まります。これを行う方法があると思いますか? – Johnydep

0

選択したブラウザで複数のテストクラス(またはwebdriverインスタンス)を生成する必要があります。 Webdriverは1つのブラウザで定義されています。

+0

を行うことができます属性だけでパラメータを追加することによって、あなたにこの のための打者結果を与えますループ。 'browser.get()'の後に 'browser.close()'関数があります。したがって、forループが次の反復を開始するときには、新しいbro変数に固有のドライバで新しいドライバオブジェクトを作成する必要があります。 – pprakash

0

Coretek氏によると、複数のwebdriverインスタンスが必要です。 selenium-server .jarファイルを実行し、各インスタンスに、サーバーのインスタンスを実行させるブラウザを指定する引数を指定する必要があります。

Internet Explorerの引数は* iexplore、firefoxの引数は* firefox、chromeの引数は* chromeです。これらは、-forcedBrowserMode引数です。さもなければ、セレンはそれが何に対して実行すべきかを知らないでしょう。あなたのテストに* iexploreProxyを使う必要があるかもしれませんが、* iexploreモードよりうまく動作することもあります。

有用である可能性がある複数の引数のために、このリンクをチェックアウト:

http://seleniumforum.forumotion.net/t89-selenium-server-command-options-while-starting-server

+0

ご回答いただきありがとうございます。ドキュメントのどこにも言及されていませんが、新しいブラウザタイプごとに別々のサーバーインスタンスが必要です.Selenium RCを使用してIE、FF、Chrome、Safariにアクセスするために、単一のSeleniumサーバーインスタンスを使用しました。また、* iexplore/* firefoxの議論モデルはSelenium RC用ですね。私はセレン2.0(Webdriver)を使用してテストケースを作成しようとしています。私を助けてくれる資料があれば教えてください。 – pprakash

+0

Webdriver 2.6でもまだ動作しています(私はしばらく更新していません) – TheDawg

+0

ホストとノードとしてseliniumを実行する場合、必要なすべてのブラウザ用の設定ファイルを提供することができます) –

1

私は右のあなたを得たのであれば、あなたは1つのテストケースを持っており、これは異なるブラウザに対してテストすることにしたいです。

私は可能な場合でもループは良いアイデアだとは思わない(私はatmを知らない)。

アイデアは、特定のブラウザ(JUnitの考え方)で実行しているスタンドアロンのすべてのテストケースをテストし、その特定のブラウザにアクセスするためにすべてを実行するのではなく、

したがって、特定のブラウザと特定のテストケースでWebDriverを作成する必要があります。

ブラウザごとにテストケースクラスのファイルを作成することで、テストケースを分離することをお勧めします。

Like:FirefoxTestOne.java、IeTestOne.java、ChromeTestOne.java。

FirefoxTestOneに複数のFirefoxテストを問題なく追加できます。彼らは特定の順序で(JUnitの哲学を通して)実行されるという保証はありません。

Googleとのリンクについては、Googleにお問い合わせください。すでに書かれている例の虫があります。

0

このように(添付URL)私のために働いた。

http://blog.varunin.com/2011/07/running-selenium-tests-on-different.html

以下の点が実施例と異なっています。

@Parameters 
public static List data() { 
    return Arrays.asList(new Object[][]{{"firefox"},{"ie"}}); 
} 
@Before 
public void setUp() throws Exception { 
    System.out.println("browser: " + browser); 
    if(browser.equalsIgnoreCase("ie")) { 
     System.setProperty("webdriver.ie.driver", "IEDriverServer64.exe"); 
     driver = new InternetExplorerDriver(); 
    } else if(browser.equalsIgnoreCase("firefox")) { 
     driver = new FirefoxDriver(); 
0

あなたはセレン+ TestNGのこの 組み合わせのTestNGを使用することができますあなたは私がのために内部で何をしようとしているのです。この

関連する問題