Selenium webdriver 在黄瓜JVM中使用依赖注入是否考虑不好的练习?

Selenium webdriver 在黄瓜JVM中使用依赖注入是否考虑不好的练习?,selenium-webdriver,dependency-injection,cucumber,cucumber-jvm,picocontainer,Selenium Webdriver,Dependency Injection,Cucumber,Cucumber Jvm,Picocontainer,我对cumberjvm/Selenium还很陌生,所以如果这个问题听起来很愚蠢,我很抱歉 背景:我在一家大公司实习。我正在为一个产品进行自动化软件测试。现有的自动化测试步骤已经存在。我们要做的是扩展项目并添加我们自己的步骤问题是几乎所有步骤都有相同的钩子方法。我之前问了一个关于如何避免运行hook方法的问题,一个非常好的人说在hook方法上使用标签。那是在我发现之前的项目中几乎所有的钩子方法都是相同的之前。这让我觉得它不是很快/优化,因为如果钩子方法是全局的,那么每次我运行一个功能文件时,它只会

我对cumberjvm/Selenium还很陌生,所以如果这个问题听起来很愚蠢,我很抱歉

背景:我在一家大公司实习。我正在为一个产品进行自动化软件测试。现有的自动化测试步骤已经存在。我们要做的是扩展项目并添加我们自己的步骤问题是几乎所有步骤都有相同的钩子方法。我之前问了一个关于如何避免运行hook方法的问题,一个非常好的人说在hook方法上使用标签。那是在我发现之前的项目中几乎所有的钩子方法都是相同的之前。这让我觉得它不是很快/优化,因为如果钩子方法是全局的,那么每次我运行一个功能文件时,它只会执行所有相同的钩子方法。在做了更多的编码和研究的几天之后,我发现了使用PICO容器的依赖注入,我认为这是修复当前问题的一个好方法,但是我读了一些文章,认为依赖注入被认为是一个坏的实践。

<强>我的问题:考虑我上面所说的,在黄瓜JVM中使用PICoCube的依赖注入是否考虑到不好的练习?如果是,有没有更好的解决办法

(可选背景)我认为这并不重要,但我只想包括它,钩子方法在每个步骤中几乎占95%:

@Before
public void keepScenario(Scenario scenario){
    this.scenario = scenario;
    fWait = new FluentWait<WebDriver>(BrowserDriver.getCurrentDriver());
    fWait.withTimeout(Duration.ofSeconds(10));
    fWait.ignoring(WebDriverException.class);
}

@After
public void screenshotOnFailure(){
    if (scenario.getStatus().equals("failed")) {
        BrowserDriver.getScreenshot(scenario);
    }
}
@之前
公共无效保留场景(场景){
this.scenario=scenario;
fWait=newFluentWait(BrowserDriver.getCurrentDriver());
等待超时(持续时间为秒(10));
忽略(WebDriverException.class);
}
@之后
public void screenshotOnFailure(){
if(scenario.getStatus().equals(“failed”)){
获取屏幕截图(场景);
}
}

依赖项注入解决了场景中多个步骤定义文件之间共享状态的问题。将步骤注入到其他步骤中可能被认为是一种不好的做法,但总的来说DI本身不是。但这些似乎都不是你的直接问题

你的问题似乎是你有多个钩子做同样的事情。您可以删除这些重复的钩子,或者使用非常严格的方法来选择要使用的功能和粘合(检查runner或commandline参数上的CucumberOptions)。如果缩小到单个类,它将只使用该类中的步骤和挂钩


或者,您可以删除重复的钩子。

依赖项注入被认为是一种不错的做法。事实上,建议使用它在步骤之间共享状态。这与定义的钩子有什么关系呢?问题是使用这些钩子方法的每一步,都会使用其中的变量。如果hook方法不存在,那么这些步骤就会失败,所以我不能在每个步骤中都删除hook。因此,我所做的是使用DI将变量共享给每个步骤。大多数特征文件需要很多不同的步骤定义来完成测试。我所说的是你所说的:把步骤注入其他步骤吗?如果是的话,我想这就是为什么以前的项目开发人员不使用DI的原因。我是否应该建议上一个开发人员使用它?还是有别的出路?顺便说一句,Rply的tq您仍然可以使用钩子在服务上设置一个变量,并将其注入到其他步骤中。是的,我建议使用DI来共享状态和其他内容。