如何 close() 和 quit() Selenium 驱动程序而不影响 Cucumber 和 Selenium 中的其他步骤?

2023-12-22

我有两个功能文件Cucumber链接到相应的步骤文件。问题是,当其中一个步骤文件完成执行时,它会关闭所有浏览器窗口(因为driver.quit())从而终止尚未完成处理的其他步骤文件的执行。

这里每个步骤文件都会打开一个新的浏览器窗口,在其中执行测试,然后关闭并退出浏览器。目前我只有两个步骤文件,但将来会有更多。

有什么东西在Cucumber执行完所有步骤后总会执行吗?

我该如何解决这个问题?

帮助步骤.java

@Ignore
public class HelpStep {

    private WebDriver driver;

    @Before
    public void setup() {
        System.out.println("Into the setup method of HelpStep...");
        this.driver = BrowserConfig.getIEWebDriver();
    }

    @Given("^The user is on the Help page$")
    public void onPage() {
        System.out.println("The user is on the Help page");
    }

    @When("^The user clicks on the links within the Help page$")
    public void clickLinks() {
        System.out.println("The user clicks on the links within the Help page");
    }

    @Then("^The user is navigated to that section$")
    public void validate() {
        System.out.println("The user is navigated to that section");
    }

    @After
    public void cleanUp() {
        System.out.println("Into the cleanUp method of HelpStep...");
        //FOLLOWING METHOD CALL KILLS ALL THE OPEN BROWSERS ALSO :(
        BrowserConfig.releaseResources(this.driver);
    }

}

LinkStatsStep.java

@Ignore
public class LinkStatsStep {

    private WebDriver driver;

    @Before
    public void setup() {
        System.out.println("Into the setup method of LinkStatsStep...");
        this.driver = BrowserConfig.getIEWebDriver();
    }

    @Given("^The user is on the Link Statistics page$")
    public void onPage() {
        System.out.println("The user is on the Link Statistics page");
    }

    @When("^The user does a search$")
    public void clickLinks() {
        System.out.println("The user does a search");
    }

    @Then("^The user is displayed search result$")
    public void validate() {
        System.out.println("The user is displayed search result");
    }

    @After
    public void cleanUp() {
        System.out.println("Into the cleanUp method of LinkStatsStep...");
        BrowserConfig.releaseResources(this.driver);
    }

}

测试运行器.java

@RunWith(Cucumber.class)
@CucumberOptions(
        plugin = {"pretty", "json:target/cucumber-reports/cucumber.json"},
        features = {"src/test/resources/features"})
public class TestRunner extends ApplicationTests {

}

浏览器配置.java

public class BrowserConfig {

    private static final String IE_DRIVER_EXE = "drivers/IEDriverServer.exe";
    private static final String WEBDRIVER_IE_DRIVER = "webdriver.ie.driver";
    private static final String BASE_URL = "https://www.google.com";

    public static WebDriver getIEWebDriver() {
        String filePath = ClassLoader.getSystemClassLoader().getResource(IE_DRIVER_EXE).getFile();
        System.setProperty(WEBDRIVER_IE_DRIVER, filePath);
        InternetExplorerOptions options = new InternetExplorerOptions().requireWindowFocus();
        options.setCapability(INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
        options.setCapability(ENABLE_ELEMENT_CACHE_CLEANUP, true);
        options.setCapability(IE_ENSURE_CLEAN_SESSION, true);
        options.setCapability(ACCEPT_SSL_CERTS, true);
        options.setCapability("nativeEvents", false);
        options.setCapability(INITIAL_BROWSER_URL, BASE_URL);
        System.out.println("Initializing IE Driver now...........");
        WebDriver driver = new InternetExplorerDriver(options);
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        return driver;
    }

    public static void releaseResources(WebDriver driver) {
        System.out.println("Releasing resources now.....");
        if (null != driver) {
            driver.close();
            driver.quit(); //CLOSES ALL THE OPEN BROWSER SESSIONS LEAVING OTHER STEP EXECUTIONS INCOMPLETE
        }
    }

}

帮助.功能

Feature: Check that the user is able to navigate to Help page

  Scenario:
    Given The user is on the Help page
    When The user clicks on the links within the Help page
    Then The user is navigated to that section

链接统计功能

Feature: Check that the user is able to navigate to Link Statistics page

  Scenario:
    Given The user is on the Link Statistics page
    When The user does a search
    Then The user is displayed search result

系统输出

Initializing IE Driver now...........
Listening on port 47613
Into the setup method of LinkStatsStep...
Initializing IE Driver now...........
Listening on port 5009
The user is on the Help page
The user clicks on the links within the Help page
The user is navigated to that section
Into the cleanUp method of HelpStep...
Releasing resources now.....
Into the cleanUp method of LinkStatsStep...
Releasing resources now.....


Into the setup method of HelpStep...
Initializing IE Driver now...........
Listening on port 17291
Into the setup method of LinkStatsStep...
Initializing IE Driver now...........
Listening on port 23793
The user is on the Link Statistics page
The user does a search
The user is displayed search result
Into the cleanUp method of HelpStep...
Releasing resources now.....
Into the cleanUp method of LinkStatsStep...
Releasing resources now.....

查看您的代码,它似乎是正确的。

Calling quit应关闭与该 webdriver 会话关联的所有打开的窗口。它不应关闭其他 Webdriver 会话的窗口。所以我认为你面临着一个问题IEDriverServer.

如果是这种情况,并且您在 JVM 中运行测试,而该 JVM 在执行所有测试后会关闭。然后作为解决方法,您可以使用关闭挂钩来调用quite并关闭所有网络驱动程序会话。例如:

private static final Thread CLOSE_THREAD = new Thread() {
    @Override
    public void run() {
      // Start a new webdriver to call quit on
      // For IE this will terminate all webdriver sessions
      getIEWebDriver().quit();
    }
};

static {
    Runtime.getRuntime().addShutdownHook(CLOSE_THREAD);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何 close() 和 quit() Selenium 驱动程序而不影响 Cucumber 和 Selenium 中的其他步骤? 的相关文章

随机推荐

  • rdpmc:令人惊讶的行为

    我试图理解 rdpmc 指令 因此我有以下 asm 代码 segment text global start start xor eax eax mov ebx 10 loop dec ebx jnz loop mov ecx 1 lt l
  • Objective C 未定义符号编译错误

    请帮助 我在目标 c 中的第一个程序 逐字逐句地遵循教程 但它给了我这个错误 我不太知道如何阅读目标 c SimpleCar h import
  • Facebook 请求代码

    我有一个 Activity 应该处理来自 Facebook SDK 和其他自定义 Activity 的结果 我在哪里可以找到 Facebook SDK 使用的 requestCodes 以免我的活动使用相同的 requestCodes 我应
  • EditText 自动换行

    我有这样的布局
  • 如何更改 html5 canvas 的尺寸而不缩放内容

    我像这样初始化画布
  • CXF - Wsdl2java - XX 属性已定义

    我使用 CXF 生成客户端类来访问 Web 服务服务器 Web 服务基于 WCF NET 当我调用 wsdl2java 时 出现以下错误 The id property is already defined use
  • 单元测试中未定义注入的依赖关系

    我是 Angular 的新手 不太清楚依赖注入到底是如何工作的 我的问题是我的服务 A 依赖于服务 B 但是当我将服务 A 注入到我的测试中时 服务 B 变得未定义 我见过在对 AngularJS 服务进行单元测试时注入依赖服务 https
  • 了解模数运算符 %

    我根据以下表达式理解模运算符 7 5 这将返回 2 因为 5 会变成 7 一次 然后给出剩下的 2 但是当您反转此语句以阅读时 我会感到困惑 5 7 这给了我 5 的值 这让我有点困惑 7虽然不能整成5 但有一部分能整成5 为什么不是没有余
  • 如何在 OSX 上自动加载 R 中的设置?如何找到R_HOME、配置Rprofile.site等?

    我有一台 Macintosh 我试图自动加载包 自制函数 并在每次启动 R 时使用修改后的设置 我相信这可以通过名为 Rprofile site 的文件并创建函数 First 和 Last 来完成在该文件中 一个问题是 我不知道我的 R H
  • 为什么商店负载屏障被认为是昂贵的?

    大多数 CPU 架构都会重新排序存储加载操作 但我的问题是为什么 我对商店负载屏障的解释如下 x 50 store load barrier y z 此外 与释放和获取语义相比 我不明白这个屏障在无锁编程中有何用处 简答 存储加载屏障可防止
  • 正则表达式:修剪字符串的一部分并返回剩下的内容

    我尝试使用正则表达式来获取字符串 12344dfdfsss isa 中 后面的内容 在本例中我想从字符串中获取 isa 我找到了这些答案 如何使用 RegExp 删除大字符串中的一小部分字符串 https stackoverflow com
  • 离线时如何安装conda环境?

    我想在没有网络连接的机器上创建 conda 环境 到目前为止我所做的是 在连接到互联网的机器上 conda create n python3 python 3 4 anaconda Conda 将所有相关包存档到 Anaconda pkgs
  • ASP.NET 依赖注入 HTTP 模块(MS 企业库)

    我一直按照 Microsoft Enterprise Library 5 0 文档中的步骤创建一个 HTTP 模块 将对 Enterprise Library 容器的引用注入到 ASP NET Web 应用程序的页面中 它包含以下代码 也出
  • .Net 中(对称)加密的最佳实践?

    什么是加密 SQL 数据库中某些敏感或个人身份数据的 最佳实践 根据 PCI HIPAA 或其他适用的合规标准 这里有很多关于解决方案各个方面的问题 但我还没有看到任何在高层讨论该方法的问题 经过一段时间的观察 我得出以下结论 使用 Cry
  • SwiftUI 添加反转蒙版

    我正在尝试向两个形状添加蒙版 以便第二个形状遮盖第一个形状 如果我做类似的事情Circle mask Circle offset 这会产生相反的效果 防止第一个圆之外的任何内容可见 For UIView答案在这里 iOS 在drawRect
  • 应该使用 NIB 或 iPhone 中的代码创建视图吗?

    使用 Interface Builder 设计视图时有性能 开发缺点或优点吗 通常您想使用 Interface Builder 您希望通过编程接口执行此操作有几个原因 它是更被接受的创建用户界面的方式 因为它的简单性和视觉优势是您无法通过简
  • 逗号分隔文本的正则表达式

    我创建一个文本字段来添加用逗号分隔的标签 例如 php jquery js ruby on Rails 该字段类似于 stakoverflow 上的字段 您可以在其中为帖子添加标签 我想验证输入以确保标签输入正确 这意味着用户只能输入字母
  • 如何以编程方式确定 C++ 中的表达式是右值还是左值?

    在 C 中确定表达式是右值还是左值的最佳方法是什么 也许 这在实践中没有用 但由于我正在学习右值和左值 我认为有一个函数会很好is lvalue如果传入输入的表达式是左值 则返回 true 否则返回 false Example std st
  • 在 ASP.NET MVC3 中使用 Razor 进行文件上传控件

    有没有办法在 ASP NET MVC3 中使用 Razor 帮助器定义文件上传控件 没有用于文件输入的 html 帮助器 但是这样做有什么问题 using Html BeginForm Action Controller FormMetho
  • 如何 close() 和 quit() Selenium 驱动程序而不影响 Cucumber 和 Selenium 中的其他步骤?

    我有两个功能文件Cucumber链接到相应的步骤文件 问题是 当其中一个步骤文件完成执行时 它会关闭所有浏览器窗口 因为driver quit 从而终止尚未完成处理的其他步骤文件的执行 这里每个步骤文件都会打开一个新的浏览器窗口 在其中执行