【问题标题】:How can I use the same chromedriver in multiple stepDefPages for multiple scenarios and without restarting my driver?如何在多个 stepDefPages 中为多个场景使用相同的 chromedriver 而无需重新启动驱动程序?
【发布时间】:2019-09-07 14:49:33
【问题描述】:

我想对我的应用程序进行测试,所以第一个场景是身份验证,一旦完成,我需要在下一页即主页上进行测试,所以我如何在不重新启动驱动程序的情况下使用相同的驱动程序第二种情况?我想直接从:@given我在首页开始!

我有一个用于 stepdefauthentification 的类,另一个用于 stepdefSearchCustomer,那么如何在第二个类中使用我的驱动程序? chromedriver 的初始化在第一页,我什至无法通过在第二页中重新启动驱动程序: driver.geturl("") 因为我们需要先进行身份验证才能显示主页。

这意味着我需要使用第一个场景中的 url 来恢复驱动程序,然后在第二个场景中从那里开始。

【问题讨论】:

标签: java selenium selenium-webdriver cucumber selenium-chromedriver


【解决方案1】:
  1. 你的场景不应该相互依赖,你的场景应该是自治的,在破坏特定场景之前,你应该准备好执行它所需的所有条件,最好在场景之后清除。

  2. 要为多个场景保留浏览器窗口,请将 WebDriver 实例设为静态,例如可以使用 Singleton Holder 模式。

我了解您的问题,要测试主页,您需要登录,所以您自然会认为按顺序执行场景可以解决它,但这是一种不好的方法。

相反,要测试主页,可以将 cookie 加载到 Web 驱动程序中,以便它认为您已经登录到会话中,或者,您可以创建 'before' @Login 钩子可以检查,如果你已经登录,如果没有,它会在运行场景之前运行登录程序。

@Before(value = "@Login")
public void loginIfNeeded()
{
    // check you are logged in, if you are, do not login
    // if you are not logged in, perform login procedure.
}

示例场景:

@Login
Scenario: Test main page
  Given something
  When something
  Then something

【讨论】:

  • 因为我是黄瓜和硒测试的新手,所以我不知道一个场景不能依赖另一个场景,所以谢谢。那么我如何测试我是否正在登录,因为在第一步我必须在浏览器中使用午餐,所以我必须执行 driver.geturl("") 所以它会带我去认证页面!请问如何验证我是否正在登录
  • 我给了你解决这个问题的可能方法,我认为最简单的方法是使用钩子(在我的帖子中给你确切的用法)钩子让你在场景之前/之后执行某些代码,在这种情况下我使用在钩子之前和钩子实现内部,您可以首先检查用户当前是否已登录(只需查看用户是否在主页上)如果没有 - 执行负责登录过程的代码。
  • 要验证您是否已登录,只需尝试定位一些仅在主页(但不在登录页面)中可用的 Web 元素,例如一些欢迎消息等。
【解决方案2】:

我建议使用 qaf 来进行驱动程序和资源管理。 您的小黄瓜文件将保持不变。到run your gherkin 文件使用GherkinScenarioFactory

您可以使用driver.name property 指定要使用的浏览器。您无需编写代码来创建或拆除驱动程序。您可以使用selenium.singletone 属性设置驱动程序会话的行为。

#this will tear down driver after each testcase/scenario
selenium.singletone=method
#this will tear down driver after each group and will reuse same driver session for testcases/scenario which are in same group.
selenium.singletone=group
#this will tear down driver after each xml test node in configuration file and will reuse same driver session for testcases/scenario configured under same xml test node.
selenium.singletone=test
#this will tear down driver after each xml suite node in configuration file.
selenium.singletone=suite

【讨论】:

    猜你喜欢
    • 2023-02-11
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多