如何在多个场景的多个 stepDefPages 中使用相同的 chromedriver 而无需重新启动我的 driver?
How can I use the same chromedriver in multiple stepDefPages for multiple scenarios and without restarting my driver?
我想对我的应用程序进行测试,所以第一个场景是身份验证,一旦完成,我需要在下一页即主页上进行测试,所以我如何使用相同的driver 在第二种情况下没有重新启动我的 driver ?我想直接从:@given 我在主页上开始!
我有一个用于 stepdefauthentification 的 class,另一个用于 stepdefSearchCustomer,那么我如何在第二个中使用第一个 class 中的 driver? chromedriver 的初始化在第一页,我什至无法通过在第二页执行 driver.geturl("") 来重新启动我的 driver,因为我们需要先进行身份验证这样首页就会显示.
这意味着我需要用第一个场景中的 url 恢复 driver,然后在第二个场景中从那里开始。
你的场景不应该相互依赖,你的场景应该是自治的,在破坏特定场景之前,你应该准备好执行它所需的所有条件,最好在场景之后清除.
为了在多种情况下保留浏览器window,将您的 WebDriver 实例设为静态,例如您可以使用 Singleton Holder 模式。
我理解你的问题,测试主页,你需要登录,所以你自然会认为按顺序执行场景就可以解决问题,但这种做法很糟糕。
相反,要测试主页,要么将 cookie 加载到网络驱动程序中,以便它认为您已经登录到会话中,要么您可以创建 '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
我建议使用执行驱动程序和资源管理的 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
我想对我的应用程序进行测试,所以第一个场景是身份验证,一旦完成,我需要在下一页即主页上进行测试,所以我如何使用相同的driver 在第二种情况下没有重新启动我的 driver ?我想直接从:@given 我在主页上开始!
我有一个用于 stepdefauthentification 的 class,另一个用于 stepdefSearchCustomer,那么我如何在第二个中使用第一个 class 中的 driver? chromedriver 的初始化在第一页,我什至无法通过在第二页执行 driver.geturl("") 来重新启动我的 driver,因为我们需要先进行身份验证这样首页就会显示.
这意味着我需要用第一个场景中的 url 恢复 driver,然后在第二个场景中从那里开始。
你的场景不应该相互依赖,你的场景应该是自治的,在破坏特定场景之前,你应该准备好执行它所需的所有条件,最好在场景之后清除.
为了在多种情况下保留浏览器window,将您的 WebDriver 实例设为静态,例如您可以使用 Singleton Holder 模式。
我理解你的问题,测试主页,你需要登录,所以你自然会认为按顺序执行场景就可以解决问题,但这种做法很糟糕。
相反,要测试主页,要么将 cookie 加载到网络驱动程序中,以便它认为您已经登录到会话中,要么您可以创建 '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
我建议使用执行驱动程序和资源管理的 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