在所有浏览器中依次运行测试用例

时间:2015-04-14 12:37:22

标签: selenium-webdriver

我想在所有多个浏览器中运行selenium webdriver测试用例但不能并行运行。可以在不使用xml和selenium grid的情况下在所有多个浏览器中运行测试用例。我们可以通过使用注释和java类来实现它。我希望我的测试用例首先在firefox中执行,并且在firefox中执行完毕后,它应该以chrome开始执行,依此类推。 我已经尝试过这段代码从一个浏览器到另一个浏览器执行我的测试用例但不能同时执行。但它会抛出异常。

ManyBrowsers.java

import java.io.File;

import org.junit.rules.MethodRule;
import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.Statement;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

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 = new File("D:\\SeleniumTestCases\\Selenium_Drivers\\chromedriver" ) ;//PATH to CHROME DRIVER
            System.setProperty("webdriver.chrome.driver", f.getAbsolutePath());
            driver = new ChromeDriver();
            base.evaluate();
            driver.quit();
        }
    };
}
}

示例测试

import java.util.concurrent.TimeUnit;

import org.junit.Rule;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.testng.annotations.AfterClass;

import com.thoughtworks.selenium.webdriven.commands.WaitForPageToLoad;

public class TestClass1 {

    protected static WebDriver driver;

    protected static String result;

    @Rule
    public ManyBrowsers browsers = new ManyBrowsers();

    @BeforeClass
    public static void setup() {
        ManyBrowsers.driver.navigate().to("http://www.floraindia.com");
        }



    @Test
    void Testcase1() {
        System.out.println("Testcase1");


        driver.findElement(By.id("kwsch")).sendKeys("Red");

        driver.findElement(By.xpath("//input[@src='image/go.gif']")).click();
        }

  @Test
  public void testGmail() throws Exception {
    driver.get("http://www.gmail.com");
    driver.findElement(By.id("Email")).clear();
    driver.findElement(By.id("Email")).sendKeys("testemail");
    driver.findElement(By.id("Passwd")).clear();
    driver.findElement(By.id("Passwd")).sendKeys("123456");
    driver.findElement(By.id("signIn")).click();
  }
  @AfterClass
    public static void teardown() {

        driver.close();

        driver.quit();

    }

2 个答案:

答案 0 :(得分:0)

为不同浏览器中的不同测试创建不同的类。例如:

头等舱:

public class FirefoxTest
{

  WebDriver driver;

  @BeforeClass
  public void beforeClass() {
    this.driver = new FirefoxDriver();
  }

  @Test
  public void test() {
    this.driver.get("http://google.com");
  }

  @AfterClass
  public void afterClass() {
    this.driver.quit();
  }

}

第二课:

public class ChromeTest
{

  WebDriver driver;

  @BeforeClass
  public void beforeClass() {
    this.driver = new ChromeDriver();
  }

  @Test
  public void test() {
    this.driver.get("http://google.com");
  }

  @AfterClass
  public void afterClass() {
    this.driver.quit();
  }

}

如果您将项目作为 TestNG测试运行,它将以编程方式创建您的xml文件,其中包含所有类,因此在这种情况下,您不必手动创建它。 / p>

答案 1 :(得分:0)

你得到NullPointerException,因为只有在 @Test 方法之前,才会调用 ManyBrowsers 类中的方法 evaluate

只应在具有 @Test 注释的方法中使用类ManyBrowsers。