我想在所有多个浏览器中运行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();
}
答案 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。