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
Selenium使用以前的退出驱动器,即使我打开了一个新驱动器。引发错误:调用quit()后无法使用FirefoxDriver_Selenium_Selenium Webdriver_Ui Testing_Selenium Firefoxdriver - Fatal编程技术网

Selenium使用以前的退出驱动器,即使我打开了一个新驱动器。引发错误:调用quit()后无法使用FirefoxDriver

Selenium使用以前的退出驱动器,即使我打开了一个新驱动器。引发错误:调用quit()后无法使用FirefoxDriver,selenium,selenium-webdriver,ui-testing,selenium-firefoxdriver,Selenium,Selenium Webdriver,Ui Testing,Selenium Firefoxdriver,我有一个由测试类调用的父web测试,如下所示: public class Webtest { protected static WebDriver driver; @BeforeMethod public static WebDriver openUrl(String URL) { driver = new FirefoxDriver(); driver.get(URL); System.out.println("Driver started :"+ driver);

我有一个由测试类调用的父web测试,如下所示:

public class Webtest
{
protected static WebDriver driver;

@BeforeMethod
public static WebDriver openUrl(String URL)
{
    driver = new FirefoxDriver();
    driver.get(URL);
    System.out.println("Driver started :"+ driver);
    return driver;
}

public static WebDriver closeDriver(){
  driver.quit();
  System.out.println("Driver closed :"+ driver);
}
}
现在,我在一个扩展它的测试类中实现了上述功能

public class testClass extends WebTest
{

@Test
public void TC01()
{   System.out.println("Test1:" + driver);
    // Do something using driver
}


@Test
public void TC02()
{
 System.out.println("Test2:" + driver);
    // Do something
}
}
现在,结果如下:

Driver started :FirefoxDriver: firefox on MAC (dfe4e055-4555-0d4d-8a83-a9a802159ea7)
Test1:FirefoxDriver: firefox on MAC (dfe4e055-4555-0d4d-8a83-a9a802159ea7)
Driver closed :FirefoxDriver: firefox on MAC (dfe4e055-4555-0d4d-8a83-a9a802159ea7)
Driver started :FirefoxDriver: firefox on MAC (1370df47-483b-574c-9792-9bb5fa077364)
Test2:FirefoxDriver: firefox on MAC (1370df47-483b-574c-9792-9bb5fa077364)
[Error] resulted in an exception: The FirefoxDriver cannot be used after quit() was called.

基本上,我假设test2使用的是前面的驱动程序。我还没有叫第二个司机退出,但我得到了错误。我确实在每种方法之间都加入了睡眠,并尝试着去做,但没有任何效果。有什么帮助吗?我使用的是firefox 46。

因为您将您的openUrl方法定义为@BeforeMethod它是在所有其他方法之前被调用的,所以当您的testClass调用TC01时,它会首先打开一个新的浏览器。然后,当您调用TC02时,将再次调用@before方法,并创建另一个新的WebDriver。不过,这并不能解释最后一行错误。我不确定它为什么会执行退出方法,因为关闭驱动程序方法似乎从未被调用过。

以下是您问题的解决方案:

您需要解决代码中的许多问题,如下所示:

System.setProperty("webdriver.gecko.driver", "C:\\your_directory\\geckodriver.exe");
driver = new FirefoxDriver();
String URL = "http://gmail.com";
System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
driver = new FirefoxDriver();
driver.get(URL);
  • Webtest
    类中,在
    closeDriver()
    方法中,您将退出驱动程序
    driver.quit()
    您仍在尝试获取WebDriver作为回报
    公共静态WebDriver closeDriver()
    。 因此,将其更改为
    publicstaticvoidclosedriver()

  • testClass
    类中,您试图扩展
    WebTest
    ,但您的基类是
    WebTest
    。 因此,将其更改为
    公共类testClass扩展Webtest

  • 要使用Selenium 3.4.0以及geckodriver v 0.16.1和最新的Mozilla Firefox 53.x,您需要下载最新的gecko驱动程序,并在代码中提及绝对路径,然后初始化驱动程序,如下所示:

    System.setProperty("webdriver.gecko.driver", "C:\\your_directory\\geckodriver.exe");
    driver = new FirefoxDriver();
    
    String URL = "http://gmail.com";
    System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
    driver = new FirefoxDriver();
    driver.get(URL);
    
  • Webtest
    中,我可以看到您正在接受URL作为参数
    公共静态WebDriver openUrl(字符串URL)
    ,但我没有看到您从
    Webtest
    传递它。保持简单,在
    openUrl()
    方法中定义
    字符串URL
    ,如下所示:

    System.setProperty("webdriver.gecko.driver", "C:\\your_directory\\geckodriver.exe");
    driver = new FirefoxDriver();
    
    String URL = "http://gmail.com";
    System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
    driver = new FirefoxDriver();
    driver.get(URL);
    
  • closeDriver()
    中,您将通过
    driver.quit()退出驱动程序System.out.println(“驱动程序关闭:”+Driver),则编码>下一步
    您将不会获得驱动程序实例的任何实时值,而只会获得
    null

  • 最后,由于添加了
    @BeforeMethod
    注释以打开驱动程序,但没有使用
    @AfterMethod
    注释将其释放,因此创建了整个混乱。添加注释
    @AfterMethod

  • 以下是您自己的工作代码以及一些简单的调整:

  • 类网络测试:

        public class Webtest 
        {
    
        protected static WebDriver driver;
    
        @BeforeMethod
        public static WebDriver openUrl()
        {
            String URL = "http://gmail.com";
            System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
            driver = new FirefoxDriver();
            driver.get(URL);
            System.out.println("Within openUrl() - Driver started :"+ driver);
            return driver;
        }
    
        @AfterMethod
        public static void closeDriver()
        {
          driver.quit();
          System.out.println("Driver closed :"+ driver);
    
        }
        }
    
    类testClass:

        public class testClass extends Webtest
        {
    
        @Test
        public void TC01()
        {   
            System.out.println("Within TC01 - Test1:" + driver);
            // Do something using driver
        }
    
    
        @Test
        public void TC02()
        {
            System.out.println("Within TC02 - Test2:" + driver);
            // Do something
        }
        }
    
    如果这能回答您的问题,请告诉我。

    您是在某处调用“closeDriver()”吗?