拥有多个步骤文件会打开多个浏览器

2024-01-29

问题:

如果我有多个 Steps 文件,当我执行测试时,似乎无论我运行哪个测试,都会为每个 Steps 文件创建 WebDriver。

每当我运行测试时,我都会看到一个看似随机的 Chrome 浏览器打开。为了查看 SpecFlow 和 ChromeDriver 之间是否存在某种不兼容性(我知道可能性不大),我将搜索测试的 WebDriver 更改为 Firefox,并将登录测试的 WebDriver 保留为 Chrome。无论我运行什么测试,我总是看到 2 个浏览器打开;一台 Chrome 和一台 Firefox。

当我将 SearchTestSteps.cs 文件中的所有步骤移至 LoginTestSteps.cs 文件中时,问题消失了。

所以,是的,这解决了眼前的问题,但将我的所有步骤放在一个文件中并不是最优的。这很快就会变得难以处理。

由于每组步骤都需要有自己的WebDriver,所以我很茫然。

这可能与文件夹结构和存储内容有关吗?这是我的样子。

Root
 |-Page Object Files
      |- Page Components
      |- Pages
      |- Test Tools  
 |- Step Definitions
      |- <*Steps.cs>  
 |- TESTS
      |- BDD Tests
          |-<*.feature>
      |- *standard selenium test files*

代码:

Login.feature
Feature: Login
    In order to be able to use Laserfiche
    As a legitimate user
    I want to be able to log into the repository

@SmokeTest
Scenario: Login with correct credentials
    Given I am on the Login page 
    And I have a good username/password combination
    And I select a repository
    When I fill out the form and submit
    Then I am taken to the repo page

---------------
LoginSteps.cs (I also have a SearchTestSteps.cs that looks very similar)
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using Selenium_C_Sharp_POC.Page_Object_Files.Pages;
using Selenium_C_Sharp_POC.Page_Object_Files.Test_Tools;
using TechTalk.SpecFlow;

namespace Selenium_C_Sharp_POC.StepDefinitions
{
    [Binding]
    public class LoginSteps
    {
        private static readonly IWebDriver Driver = new ChromeDriver();

        private static LoginPage _loginPage;
        private static string _username;
        private static string _password;
        private static string _repo;

        [AfterTestRun]
        public static void ShutDown()
        {
            Driver?.Close();
        }

        [Given(@"I am on the Login page")]
        public void GivenIAmOnTheLoginPage()
        {
            _loginPage = new LoginPage(Driver);
        }

        [Given(@"I have a good username/password combination")]
        public void GivenIHaveAGoodUsernamePasswordCombination()
        {
            _username = Nomenclature.WebClientPersonalUsername;
            _password = Nomenclature.WebClientPersonalPassword;
        }
        [Given(@"I select a repository")]
        public void GivenISelectARepository()
        {
            _repo = Nomenclature.RepoUnderTest;
        }

        [When(@"I fill out the form and submit")]
        public void WhenIFillOutTheFormAndSubmit()
        {
            _loginPage.Login(
                username: _username, 
                password: _password, 
                repo: _repo);
        }

        [Then(@"I am taken to the repo page")]
        public void ThenIAmTakenToTheRepoPage()
        {
            Assert.AreEqual(
                expected: _repo,
                actual: Driver.Title);

            HelperMethods.Logout(Driver);
        }
    }
}

我想出了如何使用绑定范围来解决这个问题。

在每个步骤文件中,我可以执行以下操作:

  [BeforeFeature(), Scope(Feature = "SearchTests")]
  public static void Startup()
  {
      _driver = new ChromeDriver();
  }

  [AfterFeature()]
  public static void ShutDown()
  {
      _driver?.Close();
  }

执行此操作只会打开和关闭我想要的测试文件的驱动程序。 如果我需要更细粒度,我还可以选择在每次测试之前确定标签的范围。

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

拥有多个步骤文件会打开多个浏览器 的相关文章

  • 尚未注册类型“IServiceProviderFactory[Autofac.ContainerBuilder]”的服务

    当运行以下命令添加数据库迁移脚本时 出现以下错误 dotnet ef migrations add InitialCreate v o Migrations context MyContext 访问 Microsoft Extensions
  • 我如何理解这个 C 类型声明?

    double bar int double double double double 在查看讲座幻灯片时 我发现了留给学生的练习 用简单的英语来说 什么是类型bar在这个 C 声明中 Please帮助我解决这个问题 我什至不知道从哪里开始
  • 更改 Qt OpenGL 窗口示例以使用 OpenGL 3.3

    我正在尝试更改 Qt OpenGL 示例以使用更现代的 opengl 版本 330 似乎合适 所以我做了 在 main cpp 上设置版本和配置文件 设置着色器版本 更改着色器以使用统一 它现在构建没有任何错误 但我只看到一个空白窗口 我错
  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • 读取 C# 中的默认应用程序设置

    我的自定义网格控件有许多应用程序设置 在用户范围内 其中大部分是颜色设置 我有一个表单 用户可以在其中自定义这些颜色 并且我想添加一个用于恢复默认颜色设置的按钮 如何读取默认设置 例如 我有一个名为的用户设置CellBackgroundCo
  • 如何在 SqlDataReader.Read() 期间从死锁异常中恢复

    我的 NET 应用程序的事件日志显示 它在从 Sql Server 读取数据时偶尔会出现死锁 这种情况通常非常罕见 因为我们已经优化了查询以避免死锁 但有时仍然会发生 过去 我们在调用ExecuteReader函数在我们的SqlComman
  • 为什么这个没有特殊字符的正则表达式会匹配更长的字符串?

    我正在使用此方法来尝试查找匹配项 例如 Regex Match A2 TS OIL TS OIL RegexOptions IgnoreCase Success 我得到了真实的结果 我很困惑 我认为这应该返回 false 因为模式中没有特殊
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • 如何在 C# 控制台应用程序中将修饰符(ctrl、alt、shift)按键捕获为单个按键?

    Console ReadKey 仅在按下 正常 键时捕获输入 然后将修饰符 如果有 附加为键信息的一部分 如何将单个修饰键注册为输入 提供了一种解决方案这个链接 https blogs msdn microsoft com toub 200
  • 时间:2019-03-17 标签:c#ThreadSafeDeepCopy

    我一直在阅读很多其他问题以及大量谷歌搜索 但我一直无法找到明确的解决方案 根据我读过的一些最佳实践 类的静态方法应该创建线程安全的 并且实例成员应该将线程安全留给消费者 我想为该类实现深度复制方法 该类本身还有其他引用类型成员 有没有什么方
  • Visual Studio Code:如何配置 includePath 以获得更好的 IntelliSense 结果

    我是使用 Visual Studio Code 的完全初学者 我不知道我在做什么 我已经四处搜索 也许还不够 但我找不到像我这样的人如何配置的简单解释c cpp properties json每当我单击带有绿色波浪线下划线的行旁边的黄色灯泡
  • std::forward_as_tuple 将参数传递给 2 个构造函数

    我想传递多个参数以便在函数内构造两个对象 以同样的方式std pair
  • 如何从文本文件读取整数到数组

    这就是我想做的 我对此有些不满 但我希望你能容忍我 这对我来说是一个非常新的概念 1 在我的程序中 我希望创建一个包含 50 个整数的数组来保存来自文件的数据 我的程序必须获取用户的文档文件夹的路径 2 文件的名称为 grades txt
  • C++ php 和静态库

    我创建了一个library a 其中包含 cpp 和 h 文件 其中包含很多类 嵌套类和方法 我想在 php 示例中包含这个静态库并尝试使用它 我想提一下 我是 php 新手 我已经在 test cpp 文件中测试了我的 libray a
  • selenium-webdriver 与 webdriverjs 有什么区别(以及何时使用)?

    我是一位使用 selenium webdriver 的经验丰富的专业人士 我正在探索有关如何测试 javascript 应用程序的更多选项 我发现了 webdriverJs 不幸的是 我不明白这两者 2 之间有什么区别 有人可以解释一下何时
  • 新任务中使用的依赖注入服务

    我在需要时使用依赖项注入来访问我的服务 但我现在想要创建一个并发任务 但这会由于依赖项注入对象及其生命周期而导致问题 我读过这篇文章 标题 防止多线程 Link http mehdi me ambient dbcontext in ef6
  • cout 和字符串连接

    我刚刚复习了我的 C 我尝试这样做 include
  • 您是否将信息添加到每个 .hpp/.cpp 文件的顶部? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 创建新的 C 头文件 源文件时 您会在顶部添加哪些信息 例如 您是否添加日期 您的姓名 文件描述等 您是否使用结构化格式来存储此信息 e g F
  • 更改 Windows Phone 系统托盘颜色

    有没有办法将 Windows Phone 上的系统托盘颜色从黑色更改为白色 我的应用程序有白色背景 所以我希望系统托盘也是白色的 您可以在页面 XAML 中执行此操作
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造

随机推荐

  • 重载或可选参数之间的性能差异?

    我想知道是否应该在 C 中使用可选参数 到目前为止 我总是重载方法 但可选参数也很好 更干净 代码更少 我在其他语言中使用它们 所以我在某种程度上也习惯了它们 有什么反对使用它们的吗 性能对我来说是第一个关键点 会掉吗 Example co
  • 如何保存 raphael 生成的 svg

    有没有办法将 raphael 生成的 SVG 保存为 svg 文件 请注意 它只需要在 Chrome 中工作 我想出了一个解决方案拉斐尔导出 https github com ElbertF Raphael Export 它给了我一个有效的
  • 更新已部署的 SSIS 包

    我有一个已部署的 SSIS 包 其中包含时间表和所有内容 现在 我对这个包进行了更改 我是否必须重新部署它 并再次为其设置计划 或者是否有办法让已部署的 SSIS 包更新为最新版本 是的 您需要将包重新部署到调度程序期望找到包的任何位置 但
  • 在 Tensorflow 2 中将梯度可视化为热图

    我正在研究通过引导反向传播生成热图的任务 我重写了原来的Relu并获得了每个参数的梯度 但是 我不确定下一步应该做什么 感谢您的帮助 谢谢你 这是我的代码 我首先使用 tf RegisterGradient GuidedRelu like
  • Python urlparse——提取不带子域的域名

    需要一种使用 Python urlparse 从 url 中提取不带子域的域名的方法 例如我想提取 google com 来自完整的网址 例如 http www google com 我能想到的最接近的urlparse is the net
  • 如何在Python中将JSON字符串转换为整数?

    如何将此 json 中的年份和 isbn 转换为整数 title The Notebook author Nicholas Sparks year 1996 isbn 0553816713 您可以简单地用相应的 int 值更新这些值 dat
  • XStream:解析时 XML 层次结构崩溃

    我有一个 XML 文档 由 Adob e XFA 表单生成 其中包含如下数据
  • fullcalendar.io 可以在 .net core Blazor 中使用吗?

    我尝试在 Blazor WebAssembly 页面中使用 FullCalendar 任何人都知道如何在 Blazor 中使用 FullCalendar 任何人都可以帮助我吗 我将 FullCalendar 包含在 libman json
  • 安装和导出仅 INTERFACE 库,CMake

    新的 CMake 用户在这里 我使用以下 CMake 文件制作了一个简单的仅标头库 cmake minimum required VERSION 3 7 project mylib VERSION 0 1 LANGUAGES CXX set
  • 是否可以在悬停时隐藏链接地址?

    我已经设置了一个包含很多链接的图表 当您将鼠标悬停在链接上时 它会显示链接在浏览器左下角的位置 这真的让我很烦恼 如下所示 可以删除这个吗 只要我可以隐藏 删除它 任何方法都可以 HTML CSS JS 等 仅当您使用 a 带有集合的元素h
  • 标题和元标签未在服务器中的角度 SSR 中呈现

    我在前端使用 Angular 6 开发了一个网站 默认情况下 Angular 对 SEO 不友好 因此为了做到这一点 我以 Angular Universal 或 Angular SSR 服务器端渲染 的方式实现它 我更新了代码并比较了之前
  • “SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED”和视图

    如果你设置SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED在从具有从多个表中进行复杂选择的视图中进行选择的存储过程中 这个位置READ UNCOMMITTED该视图中所有表的事务隔离级别 Th
  • 使用 Javascript 读取 CSV 标头

    我有一个 csv 文件 其标题如下所示 header1 header2 header3 header4 value1 value2 value3 value4 value1 value2 value3 value4 value1 value
  • 同步三个ajax请求

    我有三个 AJAX 请求相继触发 并且我希望能够同时回显所有数据 ajax type POST url page1 php data var1 var1 success function msg results2 load page2 ph
  • Android Facebook SDK SSO“无法显示您请求的页面”

    我一整天都被这个非常令人沮丧的问题困扰 通过 Google 我发现很多人都有同样的问题 但没有与新的 Android 版 Facebook API 相关的答案 我已完全按照此处列出的步骤进行操作 https developers faceb
  • Yii 嵌套设置到下拉菜单

    I m using Yii nested set behavior which helps me to keep my categories nested as seen here nevermind title rows they are
  • 如何为当前平台使用适当的颜色类别?

    我试图在 iOS 和 OS X 之间共享我的 Scene Kit 代码 但接受颜色 和图像 的 API 调用采用 UIColor UIImage 或 NSColor NSImage 具体取决于平台 如何在 Swift 中创建正确的类而不重复
  • Node 中数千个并发 http 请求

    我有一个包含数千个 URL 的列表 我想通过 http 请求进行健康检查 healt php 这是我的问题 我在节点中编写了一个应用程序 它以集中的方式发出请求 我使用一个变量来控制打开的并发连接数 300 即 一个接一个 每个请求都那么快
  • js 文件中的 php WordPress

    在 js 文件中 我需要获取 WordPress 主题的模板目录 即我需要获取以下值的返回值在 js 文件中 这个想法是这样的 var blogTemplateDir 如何才能实现这一目标 执行此操作的标准 Wordpress 方法是什么
  • 拥有多个步骤文件会打开多个浏览器

    问题 如果我有多个 Steps 文件 当我执行测试时 似乎无论我运行哪个测试 都会为每个 Steps 文件创建 WebDriver 每当我运行测试时 我都会看到一个看似随机的 Chrome 浏览器打开 为了查看 SpecFlow 和 Chr