【问题标题】:Selenium Specflow Hooks to close driver after test runSelenium Specflow Hooks 在测试运行后关闭驱动程序
【发布时间】:2020-03-22 22:44:28
【问题描述】:

我目前有一个非常简单的 Selenium Specflow 框架,可以打开 Chrome 或 Firefox 浏览器。我想添加一个AfterTestRun 挂钩来退出并处理驱动程序,以便浏览器正确关闭。

LoginPage.cs:

[Binding]
public class LoginPage
{
    private IWebDriver Driver { get; set; }

    [Given("I open a (.*) browser with a (.*) resolution (.*)")]
    public IWebDriver CreateBrowserInstance(Browser browser, BrowserResolution resolution, bool headless)
    {
        switch(browser)
        {
            case Browser.Chrome:
                Driver = StaticWebDriverFactory.GetChromeWebDriver(resolution, headless);
                return Driver;
            case Browser.Firefox:
                Driver = StaticWebDriverFactory.GetFirefoxWebDriver(resolution, headless);
                return Driver;
            default:
                throw new PlatformNotSupportedException($"{browser} is not currently supported.");
        }
    }
}

Hooks.cs

[Binding]
public class Hooks
{
    private IWebDriver Driver { get; }

    [AfterTestRun]
    public void AfterTestRun()
    {
        Driver.Quit();
        Driver.Dispose();
    }
}

当我没有 Hooks 文件时,测试将按预期打开浏览器。但是我们将其添加并运行测试,测试被跳过。我不确定钩子哪里出错了。

编辑:

我尝试将[AfterScenario] 放入LoginPage.cs 文件中,它按预期工作。

我不确定为什么我不能将测试挂钩放在单独的文件中,因为它们将被所有测试/页面使用。我看错了吗?

【问题讨论】:

  • 在您的 LoginPage 类中,您需要在构造函数中调用钩子。我看不到 LoginPage 类的任何构造函数。

标签: c# selenium selenium-chromedriver hook specflow


【解决方案1】:

我不知道为什么我不能将我的测试钩子放在一个单独的文件中 它们将被所有测试/页面使用。我看错了吗 怎么办?

您可以将测试挂钩放在单独的文件中[这是最佳做法],也可以多次。测试运行器将执行所有的钩子方法。

前/后功能和前/后测试运行事件的绑定方法必须是静态的

现在在您的情况下调试并检查您的 Driver 属性是否具有您要在 aftertest run 方法中关闭的 webdriver 实例。

通过查看您的代码,您的 Hooks 类中的 Driver 属性似乎没有您的网络驱动程序的当前实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-04
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 2014-01-26
    相关资源
    最近更新 更多