0

我有几十个 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.... {
    }

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

4

2 回答 2

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 Testpublic class TestSuite并在我的测试中通过@Test简单地调用我的驱动程序进行注释,因为它被初始化为静态。代码如下:

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

希望现在它对你有用。

于 2012-10-11T20:47:39.770 回答
-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 意味着您初始化了一些东西,并且所有以下带有注释的 selenium 测试@Test都在打开的单个浏览器窗口中运行。希望这对您有所帮助。

于 2012-10-11T15:50:20.960 回答