Selenium webdriver 在所有浏览器中逐个运行测试用例

Selenium webdriver 在所有浏览器中逐个运行测试用例,selenium-webdriver,Selenium Webdriver,我想在所有多个浏览器中运行selenium webdriver测试用例,但不是并行运行。是否可以在所有多个浏览器中运行测试用例,而不使用xml和selenium网格。我们可以通过使用注释和java类来实现这一点。我想我的测试用例应该首先在firefox中执行,在firefox中执行完成后,应该在firefox中执行在chrome中开始执行等等。 我试过用这段代码从一个浏览器到另一个浏览器执行我的测试用例,但不是同时执行。但它会引发异常 ManyBrowsers.java import java.

我想在所有多个浏览器中运行selenium webdriver测试用例,但不是并行运行。是否可以在所有多个浏览器中运行测试用例,而不使用xml和selenium网格。我们可以通过使用注释和java类来实现这一点。我想我的测试用例应该首先在firefox中执行,在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();

    }

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

头等舱:

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文件,其中包括所有类,因此,在这种情况下,您不必手动创建它。

您将获得NullPointerException,因为类中的方法evaluate仅在@Test methods之前调用


您应该只在带有@Test annotation的方法中使用类manybrowser。

引发了什么异常?您只能在带有@Test annotation的方法中使用类manybrowser。您好,Pawel,谢谢您的回复,是的,我得到了NullPointerException,我不知道我们要使用类manybrowser,你能在我的代码中做些修改吗?这对我使用这个问题的答案中的代码真的很有帮助:我已经试过你的代码看看这个屏幕截图1.class VisitGoogle,2.class ManyBrowsers 3.例外你的问题是你用TestNG framework运行测试,虽然我很难过,但我的解决方案在JUnit下工作。不幸的是TestNG不支持MethodRules,请参阅。现在我已经知道如何在TestNGSo中实现它,本质上我们需要为每个浏览器创建重复的类。