Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为不同的类重用webdriver的现有实例_Java_Selenium_Selenium Webdriver - Fatal编程技术网

Java 如何为不同的类重用webdriver的现有实例

Java 如何为不同的类重用webdriver的现有实例,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我已经浏览了这个网站上存在的问题,但无法解决 以下问题 工具:Junit、IntelliJ、Java语言 //设置类 public class SetUpTest { public static WebDriver driver; @BeforeClass public static void setUpTest() throws InterruptedException { driver=new FirefoxDriver(); driver.get("http:/

我已经浏览了这个网站上存在的问题,但无法解决 以下问题

工具:Junit、IntelliJ、Java语言

//设置类

public class SetUpTest {
public static WebDriver driver;

    @BeforeClass
public static void setUpTest() throws InterruptedException
{
    driver=new FirefoxDriver();

    driver.get("http://www.ABC.co.uk");
    Thread.sleep(5000);

}


//Test1
public class HomePageTest extends SetUpTest {

    @Test
    public void titleTest()

    {
        assertTrue(driver.getTitle().startsWith("ABC"));

//Test2
 public void merchandisingTest() throws InterruptedException {
    @Test
    public void merchandisingTest()
    {

         driver.navigate().to("http://ABC.co.uk/deals");
 assertThat(driver.getPageSource(),containsString("deals"));
我曾尝试使用@TestBefore运行测试,但仍打开了两个浏览器窗口 一个用于Test1,另一个用于Test2。我还使用了@Suite.SuiteClasses 但是问题仍然存在。

你能试试这个代码吗

public class BaseTest{
    public WebDriver driver;
    @BeforeSuite
    public void startDriver(){
        driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(5l, TimeUnit.SECONDS);
        driver.get("http://www.ABC.co.uk");
    }
}

public class HomePageTest extends BaseTest{
    @Test
    public void titleTest(){
        assetTrue(driver.getTitle().startsWith("ABC"));
    }

    @Test
    public void merchanisingTest(){
        driver.navigate().to("http://www.ABC.co.uk/deals");
        assertTrue(driver.getTitle().startsWith("deals"));
    }
}

另外,我猜您正在使用TestNG XML运行此程序,其中@BeforeSuite方法只被调用一次

Hi rsakale,我使用的是Junit,因此@BeforeSuite在这种情况下不适用。使用implicitwait并不能解决这个问题。哦,如果您在整个测试过程中维护单个类,那么您可以使用@BeforeClass,我不确定它是否有效。但现在可能是开启TestNG以获得许多好处的好时机。可能您还可以使用FactoryMethod来创建其实例只创建一次的驱动程序-在这种情况下,您可以在对象级别维护驱动程序的副本,并始终调用getDriver方法,该方法将提供原始创建的实例,而不是始终创建新实例