【发布时间】:2016-03-24 16:19:34
【问题描述】:
我面临“调用 quit() 后无法使用 FirefoxDriver”问题。请帮助。
在我的框架中,我将 WebDriver 驱动程序变量用作静态变量。在每个测试用例结束时,我执行了 driver.quit() 方法。 在下一个测试用例开始时,我再次使用 firefoxdriver() 的新实例更新了驱动程序变量。但如果我尝试使用驱动程序变量来查找任何 web 元素,驱动程序变量将返回 null。这是我的代码的简化版本。
public class Frame
{
private static WebDriver driver;
public static WebDriver openUrl(String URL)
{
driver = new FirefoxDriver();
driver.get(URL);
return driver;
}
public static WebDriver returnWebDriverInstance()
{
System.out.println("I am called");
return driver;
}
}
public class javaCheck2
{
private static WebDriver driver = Frame.returnWebDriverInstance();
static
{
// driver = Frame.returnWebDriverInstance();
System.out.println(driver + " in static");
}
public static void pageMaxim()
{
System.out.println(driver + " in page maxim");
driver.manage().window().maximize();
}
public static void pagesource()
{
System.out.println(driver + " in page source");
driver.getPageSource();
}
}
@Test
public class TestCase1
{
public void TC01()
{
WebDriver driver = Frame.openUrl("https://www.google.com");
javaCheck2.pagesource();
driver.quit();
// driver.close();
}
}
@Test
public class TestCase2
{
public void TC02()
{
WebDriver driver = Frame.openUrl("https://www.gmail.com");
javaCheck2.pageMaxim();
driver.quit();
// driver.close();
}
}
控制台输出:
I am called
FirefoxDriver: firefox on MAC (6df8103b-673f-954f-b20d-72fa4b9181b8) in static
FirefoxDriver: firefox on MAC (6df8103b-673f-954f-b20d-72fa4b9181b8) in page source
FirefoxDriver: firefox on MAC (null) in page maxim
===============================================
Suite
Total tests run: 2, Failures: 1, Skips: 0
===============================================
请帮忙
【问题讨论】:
-
不确定到底是什么,但我认为这是一些范围隐藏问题。我有 99% 的把握将代码重构为更易读的代码会解决问题(这是 2 个简单的测试,但需要一段时间才能解开其中的一半)。如果您有一个“全局”驱动程序变量,则无需在方法中创建本地副本 - 另一方面,如果您确实需要它,请将其命名为其他名称,例如 localDriver 或 driver2 或其他任何名称。
-
在 Frame 类中,静态 WebDriver 驱动程序是私有的。所以我必须在方法中获取此私有静态的副本,因为我无法从类外部直接访问驱动程序成员变量。
标签: selenium selenium-webdriver