ClassNameFilter和BeforeClass

时间:2012-10-11 10:14:09

标签: java browser selenium webdriver selenium-webdriver

我有几十个Selenium Webdriver测试。我想立刻运行它们。如何运行测试以便每个测试都不会打开新的Webdriver浏览器窗口?

这样的解决方案可能吗?这会导致驱动程序出现nullPointError。

      @ClassnameFilters({"com.company.package*", ".*Test"})

 public class TestSuite {

 public static WebDriver driver;

@BeforeClass
public static void setUpClass() {
    driver = new FirefoxDriver();
}

@AfterClass
public static void setDownClass() {
     driver.quit();
}

}

  public class Test {

private WebDriver driver = TestSuite.driver;

 @Test.... {
    }

放置新对象初始化属性会使第一个测试运行,但其他测试会导致无法访问的浏览器错误。请帮忙!

2 个答案:

答案 0 :(得分:0)

哈哈,对不起我的疏忽。 这会导致来自驱动程序的nullPointError,这只能由不正确的Web驱动程序初始化引起。 在public static WebDriver driver;中声明public class TestSuite并在

中创建实例时
@BeforeClass
public static void setUpClass() {
    driver = new FirefoxDriver();
}

你不需要

public class Test

初​​始化

再次

private WebDriver driver = TestSuite.driver;。 取而代之的是,我将以下列方式使用来自public class Test的继承public class TestSuite,并在@Test注释的测试中简单地调用我的驱动程序,因为它被初始化为静态。代码如下:

public class Test extends TestSuite {
@Test
public void findButtonAndClickOnIt(){
String buttonCssSelector ="...blablabla...";
driver.findElement(By.cssSelector(buttonCssSelector)).click();
}
}

希望现在它适合你。

答案 1 :(得分:-1)

要处理此问题,请尝试使用@BeforeClass, @AfterClass注释:

import com.google.common.base.Function;
import com.thoughtworks.selenium.SeleneseTestBase;
import junit.framework.Assert;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.openqa.selenium.*;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.FluentWait;
import org.openqa.selenium.support.ui.Wait;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.core.io.support.PropertiesLoaderUtils;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.NoSuchElementException;
import java.util.Properties;
import java.util.concurrent.TimeUnit;


public class BaseSeleniumTest extends SeleneseTestBase {
static WebDriver driver;


@Value("login.base.url")
private String loginBaseUrl;

@BeforeClass
public static void firefoxSetUp() throws MalformedURLException {

   DesiredCapabilities capability = DesiredCapabilities.firefox();


    driver = new RemoteWebDriver(new URL("http://192.168.4.52:4444/wd/hub"), capability);


    driver = new FirefoxDriver();  //for local check

    driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
    driver.manage().window().setSize(new Dimension(1920, 1080));
}
@Before
public void openFiretox() throws IOException {


    driver.get(propertyKeysLoader("login.base.url"));


}


@AfterClass
public static void closeFirefox(){
    driver.quit();
}

...

@BeforeClass意味着您初始化某些内容,并且@Test注释的所有以下selenium测试都在一个打开的浏览器窗口中运行。 希望这会对你有所帮助。