如何在多个stepDefPages中使用相同的chromedriver用于多种情况,而又不重新启动驱动程序?

时间:2019-04-17 11:07:43

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

我想在我的应用程序上进行测试,所以第一种情况是身份验证,完成后,我需要在下一页即主页上进行测试,因此如何使用相同的驱动程序而无需重新启动驱动程序第二种情况?我想直接从以下位置开始:@给出我在首页上!

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

这意味着我需要在第一种情况下使用其URL恢复驱动程序,然后在第二种情况下从那里开始。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-1)

我建议使用进行驱动程序和资源管理的qaf。 您的小黄瓜文件将保持不变。要run your gherkin文件,请使用 const DrawerNavigator = createDrawerNavigator( { DIPUTADOS: { screen: DiputadosStack, navigationOptions }, BLOQUES: { screen: BloquesStack, navigationOptions: { drawerIcon: () => { return ( <Image style={styles.Icon} source={require("./src/assets/Menu-002-b.png")} /> ); } } }, INTERBLOQUES: { screen: InterBloquesStack, navigationOptions: { drawerIcon: () => { return ( <Image style={styles.Icon} source={require("./src/assets/Menu-003-b.png")} /> ); } } }, COMISIONES: { screen: ComisionesStack, navigationOptions: { drawerIcon: () => { return ( <Image style={styles.Icon} source={require("./src/assets/Menu-004-b.png")} /> ); } } }, AUTORIDADES: { screen: AutoridadesStack, navigationOptions: { drawerIcon: () => { return ( <Image style={styles.Icon} source={require("./src/assets/Menu-005-b.png")} /> ); } } }, "SESIÓN EN VIVO": { screen: SesionEnVivoStack, navigationOptions: { drawerIcon: () => { return ( <Image style={styles.Icon} source={require("./src/assets/Menu-006-b.png")} /> ); } } }, "DIPUTADOS TV": { screen: DiputadosTVStack, navigationOptions: { drawerIcon: () => { return ( <Image style={styles.Icon} source={require("./src/assets/Menu-007-b.png")} /> ); } } }, REGLAMENTOS: { screen: PDFReglamentosStack, navigationOptions: { drawerIcon: () => { return ( <Image style={styles.Icon} source={require("./src/assets/Menu-008-b.png")} /> ); } } } }, { contentComponent: CustomDrawerContentComponent, drawerWidth: width * 0.63, contentOptions: { activeTintColor: blue, inactiveTintColor: grey, itemsContainerStyle: { textAlign: "center" }, labelStyle: { fontFamily: "RobotoCondensed-Regular", fontWeight: "400", fontSize: 17, marginLeft: -5 }, iconContainerStyle: { alignItems: "center" } } } );

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

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