在 Cucumber 6 中初始化 webdriver

问题描述

如何在 Cucumber 中初始化 webdrivermanager java 和 DAO/Spring/ 一次?

任何@BeforeSuite 或@AfterSuite 类似的机制?

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@CucumberOptions(
        features = "src/main/resources/Features",glue = "com.cimb.StepsDef",plugin = {"com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter:","json:target/cucumber-report.json"})
public class ParallelRunner {
}

Cucumber 支持 JUnits @ClassRule、@BeforeClass 和 @AfterClass 注释。这些将在所有场景之前和之后执行。不推荐使用这些,因为它限制了不同跑步者之间的可移植性;使用命令行、IntelliJ IDEA 或 Cucumber-Eclipse 时,它​​们可能无法正确执行。相反,建议使用 Cucumbers Before 和 After 钩子。

请提供一些示例代码。十亿感谢您的帮助。

解决方法

您可以使用 cucumber-guice 来初始化 webdriver。这也将使您的测试场景独立,因为为每个场景创建了一个新的驱动程序实例。这是我使用它的方法

要使用以下代码,您需要 cucumber-guice 依赖项

 <dependency>
      <groupId>io.cucumber</groupId>
      <artifactId>cucumber-guice</artifactId>
      <version>${cucumber.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.google.inject</groupId>
      <artifactId>guice</artifactId>
      <version>4.2.3</version>
      <scope>test</scope>
    </dependency>

在 chromemanager 类中

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;

public class ChromeManager extends DriverManager {

     protected ChromeDriver driver;
    
         @Override
         protected WebDriver createDriver() {

                    System.setProperty("webdriver.chrome.driver","/Users/../chromedriver");
                    return driver = new ChromeDriver(ChromeDriverService.createDefaultService());
        }

        @Override
         public WebDriver getDriver() {
                 if (driver == null) {
                             this.createDriver();
                }
                return driver;
        }

}

驱动工厂类

import org.openqa.selenium.WebDriver;

public class DriverFactory {
        public WebDriver getManager() {

            return new ChromeManager().getDriver();
        }
}

司机班

import org.openqa.selenium.WebDriver;

     public abstract class DriverManager {

                     protected abstract WebDriver createDriver();
                     public abstract WebDriver getDriver();
     }

然后在一个全局类中

import org.openqa.selenium.WebDriver;
import io.cucumber.guice.ScenarioScoped;  
 
 @ScenarioScoped
    
          public class Global {
          public WebDriver driver;
           public WebDriverWait wait;
        
          public Global() {
                driver = new DriverFactory().getManager();
                wait = new WebDriverWait(driver,3000);
    
          }
    
    }

最后是你的测试课

import com.google.inject.Inject;     
import com.test.support.Global;    


public class InitialIT  {

         public static  ChromeDriver driver ;
                     
        @Inject
        Global global;
            
    @Test
       @Given("I open the site {string}")
        public void OpenSite(String site) throws MalformedURLException {                 
                global.driver.get(site);                   
       }
                      
         @After
        public void closeBrowser() {    
             global.driver.quit();
      }

}

如果您使用的是junit jupiter。您也可以使用 selenium-jupiter 来管理 webdriver

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...