Selenium使用以前的退出驱动器,即使我打开了一个新驱动器。引发错误:调用quit()后无法使用FirefoxDriver
我有一个由测试类调用的父web测试,如下所示: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);
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
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()”吗?