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

C#Selenium Firefox-错误异常“浏览上下文已被丢弃”

曹臻
2023-03-14

我正在编写一个程序,帮助我的客户从网站下载发票PDF,第一次使用drv时一切正常。导航()。GoToUrl(URL);。之后,程序Hibernate一定时间,醒来时开始搜索我的客户的电子邮件(使用S22 DLL),如果他找到某个电子邮件,则从电子邮件中提取链接并使用(第二次)drv。导航()。GoToUrl(URL);。但这次我得到了一个例外

浏览上下文已被丢弃

我已经尽了一切可能,但最“震惊”的是,我在谷歌上找不到任何关于这个错误的东西,也没有在硒留档上找到任何东西。

我不明白这是什么意思

我确信这个链接是有效的,因为是同一个链接。

下面是受此问题影响的代码

P、 S:第一次下载与第二次下载完全相同。

    public static int Go(string URL, ImapClient EmailClient, uint mUID, bool isFromOutlook) {
    // While the Firefox driver isn't initialized, wait for it
    while (isDrvInit != 1 && isDrvInit != 2)
        Thread.Sleep(1);
        // If the Firefox driver was not able to initialize, we can't procede further
    if (isDrvInit == 2)
        return 0;

    try {
        drv.Navigate().GoToUrl(URL); // Here the program throw the exception

        if (isLoginPage()) {
            if (!Login()) {
                if (Internet.IsAvailable()) {
                    Error.Show(Error.Code.MOBILCOM_LOGIN, Error.Status.F, Error.Type.DEFAULT,
                              "Unable to log-in to the Mobilcom account... Are the e-mail/password in the config file correct?");
                    } else {
                        Error.Show(Error.Code.FIREFOX_CANT_NAVIGATE, Error.Status.W, Error.Type.DEFAULT, String.Format(
                                  "Can't connect to Mobilcom because Internet connection is missing...", drv.Url));
                    }

                     return 0;
            } else {
                Error.Show(Error.Code.MOBILCOM_LOGIN, Error.Status.S, Error.Type.DEFAULT,
                           "Successfully logged to the Mobilcom account!");

                if (GetPdfInvoice() == true) {
                    if (isFromOutlook) {
                        MailMessage _m = EmailClient.GetMessage(mUID, true, Global.outlookSpecialFolder);

                        Error.Show(Error.Code._DEFAULT, Error.Status.S, Error.Type.OUTLOOK, String.Format(
                                  "PDF Invoice: Subject: [{0}] | Downloaded from the link '{1}' successfully saved! :)",
                                   _m.Subject, drv.Url));
                        } else {
                            MailMessage _m = EmailClient.GetMessage(mUID, true, Global.gmailSpecialFolder);

                            Error.Show(Error.Code._DEFAULT, Error.Status.S, Error.Type.GMAIL, String.Format(
                                       "PDF Invoice: Subject: [{0}] | Downloaded from the link '{1}' successfully saved! :)",
                                        _m.Subject, drv.Url));
                        }
                } else {
                    if (!Internet.IsAvailable()) {
                        Error.Show(Error.Code.MOBILCOM_NO_INTERNET, Error.Status.W, Error.Type.DEFAULT, String.Format(
                                   "Can't download the PDF Invoice from '{0}' because Internet connection is missing!",
                                    drv.Url));
                        } else {
                            Error.Show(Error.Code.MOBILCOM_CANT_D_PDF, Error.Status.F, Error.Type.DEFAULT, String.Format (
                                      "Unknow Exception: Can't download the PDF Invoice from '{0}', retrying to download next time...",
                                       drv.Url));
                        }
                }

                CloseUnnecessaryTabs();
            }
        } else {
        // Still nothing
        }

        return 1;
    } catch {
        if (!Internet.IsAvailable()) {
            Error.Show(Error.Code.FIREFOX_CANT_NAVIGATE, Error.Status.W, Error.Type.DEFAULT, String.Format(
                      "Unable to continue on Mobilcom because Internet connection is missing, retrying to download next time..."));
        } else {
            Error.Show(Error.Code.FIREFOX_CANT_NAVIGATE, Error.Status.F, Error.Type.DEFAULT, String.Format(
                      "Unknow Exception: Unable to reach the '{0}' URL", drv.Url));
        }

        CloseUnnecessaryTabs();
        return 0;
    }
}

[编辑]

关闭不必要的选项卡()代码关闭每个打开的选项卡,只留下一个以避免关闭Firefox

private static void CloseUnnecessaryTabs() {
                if (drv.WindowHandles.Count > 1) {
                    for (int i = drv.WindowHandles.Count - 1; i > 0; i--) {
                        drv.SwitchTo().Window(drv.WindowHandles[i]);
                        drv.Close();
                    }
                }
            }

共有1个答案

仉洲
2023-03-14

我在代码中发现了导致此异常的错误。

我忘记了在关闭不必要的选项卡后切换回“主”选项卡,我解决了添加drv的问题。切换到()。窗口(drv.WindowHandles[0]) 到myCloseUnnecessaryTabs()code。

private static void CloseUnnecessaryTabs() {
                if (drv.WindowHandles.Count > 1) {
                    for (int i = drv.WindowHandles.Count - 1; i > 0; i--) {
                        drv.SwitchTo().Window(drv.WindowHandles[i]);
                        drv.Close();
                    }
                }

                drv.SwitchTo().Window(drv.WindowHandles[0]); // <-- The solution
            }

我在这里找到了一个“提示”

每个浏览上下文都有一个关联的已知元素列表。当浏览上下文被丢弃时,已知元素列表也会随之丢弃。

 类似资料:
  • 问题内容: 我正在尝试使用量角器运行一个简单的测试脚本。 环境: 这是我的量角器配置文件。 这是我的测试脚本(todo-spec.js) 这是我的 node_modules / protractor / node_modules / webdriver-manager / selenium / 目录,如下所示: 使用进行测试时,出现以下错误。 任何帮助,将不胜感激。 问题答案: 可以使用以下配置解

  • 如何在Docker中运行基于硒的测试? 我正在尝试使用Firefox和Geckodriver在Ubuntu 18 Docker镜像下运行一些Python Selenium测试。 我的docker撰写。yml文件只是: 不幸的是,大多数测试都会失败,出现以下错误: 我能找到的少数提及此错误的搜索结果表明这是因为内存不足。我正在运行测试的服务器总内存为8GB,尽管我也在32GB的机器上进行了测试并收到

  • 这是我的全部剧本 运行时产生: 我刚刚经历了更新的一切: 壁虎河:0.29.0 我已经搜索了几个关于同一个错误的问题,但仍然完全不知道这里的问题是什么。我几乎什么都没做。这是Selenium Python的开始示例,或者至少是开始示例的开始。

  • 我在Eclipse中尝试Apache HTTP客户端库 下面的代码片段检查了异常并需要处理。 日蚀给出了3条建议 > Add throws Exception-(工作正常) 用尝试捕捉包围- (也工作正常) 用try/multicatch环绕 第三个选项给出错误 客户端协议异常已经被替代的IO异常捕获 我看到了的源代码,它。据我所知,在捕获多个异常时,我们可以在更具体的异常下捕获更一般的异常。因此

  • 我有以下代码。。。 ...执行以下操作: 实例化web驱动程序 导航到页面 点击页面上的按钮,打开一个新窗口 切换到新窗口 单击新窗口中的另一个按钮 不幸的是,单击第一个按钮后,新窗口从未打开,程序终止时出现以下错误: 今天之前一切都很好,我不知道发生了什么。有什么想法吗?

  • 我正在用詹金斯的铬驱动插件进行一系列硒测试。 org.openqa.selenium.remote.UnreachableBrowserExcture:无法启动新会话。可能的原因是远程服务器地址无效或浏览器启动失败。 在java代码中,我如何让chrome驱动程序在Jenkins服务器上查找其exe