【问题标题】:How to run Selenium webdriver test cases in multiple browser one after other browser get finish using TestNg and eclipse如何在其他浏览器完成使用 TestNg 和 eclipse 后在多个浏览器中运行 Selenium webdriver 测试用例
【发布时间】:2015-04-07 07:32:09
【问题描述】:

我想在所有多个浏览器中运行 selenium webdriver 测试用例但不是并行。是否可以在不使用 xml 和 selenium 网格的情况下在所有多个浏览器中运行测试用例。我们可以通过使用注释和java类。我希望我的测试用例应该首先在firefox中执行,在firefox中执行完成后它应该开始在chrome中执行等等。

我已经尝试过这段代码,但使用 xml 执行是并行的。

CrossBrowserScript.java

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class CrossBrowserScript {

    WebDriver driver;

    /**
     * This function will execute before each Test tag in testng.xml
     * @param browser
     * @throws Exception
     */
    @BeforeTest
    @Parameters("browser")
    public void setup(String browser) throws Exception{
        //Check if parameter passed from TestNG is 'firefox'
        if(browser.equalsIgnoreCase("firefox")){
        //create firefox instance
            driver = new FirefoxDriver();
        }
        //Check if parameter passed as 'chrome'
        else if(browser.equalsIgnoreCase("chrome")){
            //set path to chromedriver.exe
            System.setProperty("webdriver.chrome.driver",".\\chromedriver.exe");
            //create chrome instance
            driver = new ChromeDriver();
        }
        //Check if parameter passed as 'IE'
                else if(browser.equalsIgnoreCase("ie")){
                    //set path to IE.exe
                    System.setProperty("webdriver.ie.driver",".\\IEDriverServer.exe");
                    //create IE instance
                    driver = new InternetExplorerDriver();
                }
        else{
            //If no browser passed throw exception
            throw new Exception("Browser is not correct");
        }
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }

    @Test
    public void testParameterWithXML() throws InterruptedException{
        driver.get("http://demo.guru99.com/V4/");
        //Find user name
        WebElement userName = driver.findElement(By.name("uid"));
        //Fill user name
        userName.sendKeys("guru99");
        //Find password
        WebElement password = driver.findElement(By.name("password"));
        //Fill password
        password.sendKeys("guru99");
    }
}

testngCrossBrowser.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="TestSuite" thread-count="3"  parallel="tests" >
  <test name="ChromeTest">
  <parameter name="browser" value="Chrome" />
    <classes>
       <class name="parallelTest.CrossBrowserScript">
       </class>
    </classes>
  </test>
  <test name="FirefoxTest">
  <parameter name="browser" value="Firefox" />
    <classes>
       <class name="parallelTest.CrossBrowserScript">
       </class>
    </classes>
  </test>
  <test name="IETest">
  <parameter name="browser" value="IE" />
    <classes>
       <class name="parallelTest.CrossBrowserScript">
       </class>
    </classes>
  </test>
 </suite>

【问题讨论】:

  • vnnogile,你应该接受一个答案。 Pawels 的回答对我有用!

标签: selenium-webdriver


【解决方案1】:

使用 JUnit,您可以创建 MethodRule (http://junit.org/apidocs/org/junit/rules/MethodRule.html),它将在所有浏览器中运行测试。

例子:

public class ManyBrowsers implements MethodRule {

public static WebDriver driver;

@Override
public Statement apply(final Statement base, FrameworkMethod method, Object target) {
    return new Statement() {

        @Override
        public void evaluate() throws Throwable {
            //RUN FIREFOX
            driver = new FirefoxDriver();
            base.evaluate();
            driver.quit();

            //RUN CHROME
            File f = //PATH to CHROME DRIVER
            System.setProperty("webdriver.chrome.driver", f.getAbsolutePath());
            driver = new ChromeDriver();
            base.evaluate();
            driver.quit();
        }
    };
}

}

示例测试:

public class VisitGoogle {

@Rule
public ManyBrowsers browsers = new ManyBrowsers();

@Test
public void test() {
    ManyBrowsers.driver.navigate().to("https://www.google.com/");
}

}

【讨论】:

  • 感谢 Pawel 的回复,实际上我是 selenium webdriver 的新手,所以我很难理解上面的代码,你能不能给我一个与这个主题相关的示例代码,这对我很有帮助.
  • 我发现使用 JUnit MethodRule 更容易。我已经编辑了我的答案。现在它是完全有效的解决方案。
  • 嗨 Pawel,我在我的代码中添加了上面的代码,但它不起作用它会引发异常。我创建了新帖子,以便其他人也看到该帖子,请回复我的帖子链接stackoverflow.com/questions/29627516/…
  • 谢谢你,帕维尔。这非常非常有帮助!
【解决方案2】:

尝试将thread-count="3" 更改为thread-count="1"。这应该按照您在 TestNG 文件中提到的顺序执行您的测试。

【讨论】:

    猜你喜欢
    • 2012-04-03
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 2012-08-03
    • 2017-12-14
    • 2014-10-27
    相关资源
    最近更新 更多