Selenium和TestNG都在一个浏览器中进行测试

时间:2013-12-30 04:02:30

标签: java testing selenium selenium-webdriver testng

我有抽象类,初始化webdriver。所有执行测试的类都是从他继承的。我希望减少测试时间,为所有测试打开浏览器。

class AbstractClassCase {
    public static WebDriver driver;

    @BeforeClass    
    @Parameters({"webDriver", "applicationHost", "applicationPort", "driverHost", "driverPort",  "username", "password"})
    public void setUp(
        String webDriverIdentifier,
        String applicationHost,
        @Optional String applicationPort,
        @Optional String driverHost,
        @Optional String driverPort,
        @Optional String username,
        @Optional String password){      

        driver = new FirefoxDriver();
        driver.get("localhost");
        login(username, password)

    }

    @AfterСlass
    public void tearDown() {   
        driver.quite();
    }     

}

public class TestButton extends AbstractClassCase {
    @Test
    public void testClickButtonNo() {
        WebElement button = driver.findElement(By.id("button-no"));
        button.click();
        WebElement status = driver.findElement(By.id("button-status"));
        Assert.assertEqual("Cancel", status.getText());
   }
}

和其他同样精神的测试课。

如何重新配置​​此类,以便浏览器打开一次?

2 个答案:

答案 0 :(得分:4)

如果您想在开始时打开浏览器并运行所有方法,然后将其关闭。

我建议您遵循以下两个步骤。

第1步 : 在 @BeforeSuite &&&关闭浏览器/ driversession的 @AfterSuite 。这确保了这些测试在测试套件之前和之后运行一次。

protected static WebDriver Browser_Session;

@BeforeSuite
public void beforeSuite() {
    Browser_Session=new FirefoxDriver();
    Browser_Session.manage().timeouts().implicitlyWait(30000, TimeUnit.MILLISECONDS);
}

@AfterSuite
public void afterSuite() {
    Browser_Session.quit();
}

Step2 :打开testng.xml并在单个套件下包含所有此类(测试方法),从而确保首先调用浏览器(通过Selenium)然后休息所有方法都在同一个浏览器中运行。 enter image description here

此处“ 类初始 ”包含浏览器启动代码和ClassA& ClassB是Init。

的子类

希望这有帮助

答案 1 :(得分:2)

如果你想在一个实例中运行所有测试,我编写了自己的WebDriverFactory,所以这里有一些帮助的例子:

    public static WebDriver getDriver(){
       if (driver == null) {
            return new FireFoxDriver();
        } else {
          return driver;
        }
   }

现在删除AfterClass并将其添加到您的类中,它将最终关闭您的浏览器

static {
        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                try {
                    dismissDriver();
                } catch (Exception e) {
                }
            }
        });
}

 public static void dismissDriver() {
        if (driver != null) {
            try {
                driver.quit();
                driver = null;
            } catch (Throwable t) {
            }
        }
    }