【问题标题】:How to reuse the driver across sessions [duplicate]如何跨会话重用驱动程序[重复]
【发布时间】:2020-04-12 05:19:50
【问题描述】:

我已经搜索了这个答案的高低,但我无法找到所需的确切答案;如果这感觉它重复另一个问题,请耐心等待。

使用 C#、.NET、SpecFlow、Selenium

我有几个特征文件使用彼此的行,这主要是使用它们的主要原因之一。为了方便起见,我将它们淡化以绘制问题的图片......我也会突出显示重复使用的线条。

功能文件 A - 鉴于我已经加载了网站 当我输入有效的用户名和密码时 然后我就可以登录了

功能文件 B - 鉴于我已经加载了网站 当我输入无效的用户名和密码时 那我就登录不了了

功能文件 C - 鉴于我已经加载了网站 当我创建帐户时 完成后会显示登录屏幕 然后我输入我的新帐户详细信息 然后我可以登录了

如您所见,我的功能文件交叉,因此 B 需要 A,C 需要 A。我的问题是,我如何一个接一个地运行所有这些,如何在 A 退出时重用驱动程序浏览器,因为该流程已经结束?

【问题讨论】:

  • 您的测试始终应该是 E2E,这应该是使用 BDD 框架的方式。一旦功能文件 1 完成,应该有新的功能文件 2 会话。但是您可以在任何时候重用对象而不是会话。
  • 这是我感到困惑的地方,因为功能文件 1 是端到端的,但是,它们彼此共享步骤(作为这种工作方式的标准。)所以功能文件 2 将调用步骤功能文件 1 的定义,因为它们正在共享步骤,因此功能文件 2 不需要Driver = new ChromeDriver();,因为它已经具有由功能文件 1 的步骤定义启动的 chrome 会话,但需要自己的驱动程序来定位元素?如果是这样,这是什么样的?
  • 看看这个链接有没有帮助testautomationtribe.com/specflow-with-page-object
  • 让您的测试用例相互依赖通常是一种不好的测试实践,尤其是在自动化环境中。每个测试用例应该独立于其他每个测试用例执行,一个测试用例的结果不应该决定另一个测试用例的结果。
  • SpecFlow 的主要好处是它是可能的,除此之外。

标签: selenium selenium-webdriver automation webdriver selenium-chromedriver


【解决方案1】:

可能定义多个驱动程序?像 driver1, driver2 并将它们用于您的不同场景。它们将打开 2 个浏览器实例并根据您的代码顺序工作。 IWebDriver driver = new ChromeDriver(options); IWebDriver driver2 = new ChromeDriver(options); 这不是一个很好的方法,因为它会减慢系统速度,但它确实有效。 另一种方法是使用硒网格。但不确定您是否需要这个来解决这个问题。如果您有兴趣在不同的浏览器上测试相同的功能,您还可以定义多个不同浏览器的驱动程序,

【讨论】:

  • 这听起来像是正确的解决方案,我会在星期一试一试,然后告诉你;谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多