当前位置: 首页 > 知识库问答 >
问题:

虽然我在调用quit()后实例化了驱动程序,但仍然得到了以下结果:调用quit()后FirefoxDriver不能使用

齐乐
2023-03-14

我正面临“调用quit()后FirefoxDriver无法使用”的问题。请帮助。

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

===============================================

请帮忙

共有1个答案

廉实
2023-03-14

问题在于,JavaCheck2的静态Driver实例只设置一次(在静态init块中),并且永远不会重置,因此一旦调用quit(),基础会话(尽管不是null)就会无效。它永远不会重置,这就是为什么当您再次尝试使用驱动程序实例时会出现失败。

让它工作的最简单的修复(不需要大的重构)是:

public class javaCheck2 {
    public static void pageMaxim() {
        Frame.returnWebDriverInstance().manage().window().maximize();
    }

    public static void pagesource() {
        Frame.returnWebDriverInstance().getPageSource();
    }
}
 类似资料:
  • 我正在尝试使用Cucumber/Java编写一些selenium自动化UI测试。如果我的功能文件中只有一个测试,则一切正常。但是如果我添加第二个测试,我会在<code>driver.get()上得到这个错误。</code>: 基本上,我在一个包中初始化 InitializeWebdriver 类上的 webdriver 变量,然后在其他(步骤定义)类中引用它。我确实将下面的步骤定义列为 Initi

  • 我有一个骆驼路线如下。虽然我设置了处理(true),但我不明白为什么defaul在所有重试都耗尽后,defaul的处理程序会调用的。 日志: 20.04.03 11:46:53.907 INFO ad #6 - timer://testRoute route1 面包屑 Id=ID-xxxxxx-1585894556662-0-4 |世界您好 20.04.03 11:46:53.913错误广告#6-

  • 我正在尝试编写一个函数,该函数将取一个整数,将其除以数字,将其相加,如果总和为 我并不是真的在寻找一个最佳的解决方案,我只是想知道为什么这不起作用。

  • 当我试图运行dataloader时。py我得到了以下导入错误。我逐行尝试代码,发现在将tensorlayer导入为t1时出现了此错误。 ModuleNotFoundError:没有名为'numpy.core._multiarray_umath'的模块重要错误:numpy.core.multiarray导入失败 上述异常是以下异常的直接原因: Traceback(最近的调用最后):文件”

  • 我已将laravel应用程序的时区更改为,并在app.php文件中更改了此时区 但是,当我使用签入生产时区时,我得到的时区是UTC 我如何设置碳原子的时区

  • 问题内容: 我正在尝试模拟一个进行JNDI调用的私有方法。从单元测试中调用该方法时,它将引发异常^。我想模拟该方法用于测试目的。我使用了另一个问题answer中的示例代码,并且在测试通过时,似乎仍在调用底层方法。我在方法中插入,然后将其打印到控制台。 有趣的是,如果我将第一个注释掉,则测试通过。?:( 那么,我如何模拟出一个私有方法,使其不被调用? ^可以理解,由于我的工作空间不支持JNDI,因此