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