browser
  • selenium
  • webdriver
  • 2012-02-26 130 views 5 likes 
    5

    我試圖通過for循環跨多個瀏覽器運行相同的測試,但它始終只在Firefox上運行。使用硒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 2012-03-01 06:36:50

    +0

    嘿你有沒有嘗試過運行同一瀏覽器的多個實例?我嘗試用chrome,但它失敗了,但我的構造函數從新的ChromeDriver()開始。你認爲有沒有辦法做到這一點? – Johnydep 2012-08-22 22:50:15

    0

    您必須使用所選瀏覽器生成多個測試類(或webdriver實例)。 Webdriver是用一個瀏覽器定義的。

    +0

    這就是我想對裏面做循環。 'browser.get()'後面有'browser.close()'函數。因此,當for循環開始下一次迭代時,它應該創建一個新的驅動程序對象,其中驅動程序特定於新的bro變量。 – pprakash 2012-02-27 16:13:20

    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服務器實例,並使用它來使用Selenium RC訪問IE,FF,Chrome和Safari。而且iexplore/* firefox的參數模型是針對Selenium RC的,不是嗎?我試圖使用Selenium 2.0(Webdriver)創建測試用例。請指出是否有任何文件可以幫助我。 – pprakash 2012-02-28 00:53:02

    +0

    它仍然適用於2.6版本的Webdriver(我有一段時間沒有更新) – TheDawg 2012-02-28 23:27:17

    +0

    如果您運行selinium作爲主機和節點,您可以爲所需的所有瀏覽器提供配置文件(或可以放在同一臺機器上) – 2013-09-13 20:02:31

    1

    所以,如果我有你的權利,你有一個測試用例,並希望這種針對不同的瀏覽器進行測試。

    即使可能(我不知道atm),我不認爲循環是一個好主意。

    這個想法是能夠使用特定的瀏覽器(即JUnit哲學)測試每個測試用例的獨立運行情況,而不是全部運行以便訪問該特定的瀏覽器。

    所以你需要用特定的瀏覽器和特定的測試用例來創建WebDriver。

    我建議你通過爲每個瀏覽器創建一個testcase-class文件來分隔測試用例。

    喜歡:FirefoxTestOne.java,IeTestOne.java,ChromeTestOne.java。

    請注意,您可以在FirefoxTestOne中添加多個Firefox測試而不會出現問題。 Theres不保證它們將通過(JUnit哲學)以特定順序執行。

    對於鏈接和教程要求谷歌。已經有很多書面例子了。

    0

    這種方式(附加網址)爲我工作。

    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的組合爲您提供了這個 麪糊結果只是通過添加參數屬性,你可以做到這一點

    相關問題