【问题标题】:How to stop running selenium tests AFTER webdriver.quit()?如何在 webdriver.quit() 之后停止运行 selenium 测试?
【发布时间】:2015-05-06 22:01:31
【问题描述】:

我制作了一个 Windows 窗体应用来托管我的 GUI 以运行 selenium 测试。

当用户按下“运行测试”按钮时,它会启动一个 chromedriver 实例并运行选定的 selenium 测试。

但是,假设在测试运行时,用户决定要停止测试,或者干脆不运行整个测试。

我在表单上有一个调用 FixtureTearDown() 的按钮,以防发生这种情况。 FixtureTearDown 很简单:

if (_driver != null) _driver.Quit();

但是,如果您按下此“停止测试”按钮,驱动程序将关闭,但 selenium 测试会继续执行脚本,就好像 web 驱动程序仍处于打开状态一样,这会引发错误(因为它找不到元素,因为驱动程序已关闭,呃)并导致我的 Windows 窗体应用程序崩溃。

那么,有没有办法优雅地停止 selenium 脚本的运行?提前感谢您的帮助,如果这是一个愚蠢的问题,我深表歉意,我对 selenium 和 c# 还是很陌生。

【问题讨论】:

    标签: c# selenium selenium-webdriver selenium-chromedriver


    【解决方案1】:

    好吧,我想通了。这可能不是一个好的做法,但它可以满足我的需要。

    在每个测试方法中,我都将目标线程设置为即将启动的当前线程

    Thread targetThread = Thread.CurrentThread;
    

    然后,点击“停止测试”,结束线程。

    public void haltScript()
        {
            targetThread.Abort();
        }
    

    像魅力一样工作。

    【讨论】:

      【解决方案2】:
      webDriver.Quit();
      

      停止执行测试。它将一直持续到所有测试完成并在班级/套装中执行,具体取决于您的设置方式。该部分通常由测试运行者处理。调用测试运行器使用的机制来停止从您创建的应用程序执行测试。

      【讨论】:

      • 是的,我知道 webdriver.quit 不会停止测试的执行。这就是我问这个问题的原因!!你说“调用测试运行器用来停止测试的机制”,但我没有机制。这就是我要问的,我可以使用什么机制来停止脚本的运行?
      • @kdeez 正如我所说,这取决于您使用的是哪种测试运行器。例如,我使用 RSharper 和有时使用 NUnit 测试运行器进行测试。可能参考您正在使用的测试运行器的 api doc 并调用 api 以停止您创建的应用程序的执行
      【解决方案3】:

      这是我可以提出的建议。

      1) 您可以设置公共“标志”变量,例如布尔值。当您开始测试时,它将被设置为 false。 “停止测试”按钮将其设置为真。当你的测试正在运行时,它应该检查它的值是否。如果为真,它将退出测试脚本。

      2) 你可以设置它在不同的线程上运行。然后“停止测试”将停止正在运行测试的线程。

      您可以参考这里:https://msdn.microsoft.com/en-us/library/7a2f3ay4(v=vs.90).aspx 进行设置。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-31
        • 1970-01-01
        • 1970-01-01
        • 2018-01-10
        • 1970-01-01
        相关资源
        最近更新 更多