browser
  • selenium
  • webdriver
  • 2012-02-26 129 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的组合为您提供了这个 面糊结果只是通过添加参数属性,你可以做到这一点

    相关问题