现在,我们正在努力采用Cucumber在Java8 /
Spring应用程序上运行功能测试。我们希望步骤定义文件尽可能保持DRY状态,并计划在不同的特征文件中使用相同的步骤定义。由于我们使用seleniumWebDriver
来驱动测试,因此我们需要在步骤定义之间共享相同的驱动程序。
为了说明为什么拥有多个驱动程序对我们来说是个问题,请想象一个功能文件,该功能文件定义了两个步骤:一个浏览到页面,另一个声明在该页面上出现一行。如果两个步骤都恰好在单独的文件中定义,则第一步定义将使用其驱动程序导航到页面。到第二步定义针对其驱动程序运行断言时,它尚未导航至页面(因为这些操作已移至另一个驱动程序),并且测试失败。
我们尝试实现每个步骤定义文件都将扩展的基类(包含驱动程序)。事实证明,Cucumber实例化每个步骤定义类的实例,因此,我们最终得到每个步骤定义具有不同的WebDriver
实例。
我们曾考虑过使用Spring WebDriver
在每个步骤定义文件中注入一个实例,但是我相信这会导致上述相同的问题。
我知道可以使用单例模式来实现这一目标,但是我们的模式似乎是一个常见的问题,单例模式感觉像是过大了。这实际上是正确的方法吗?还是我缺少真正明显的东西?
预先感谢您的帮助!
我建议您将pico-container用作要与一起使用的依赖项注入框架cucumber-jvm
。
使用PicoContainer,您可以使用WebDriver实例创建一个“基”类,然后将该基类自动地传递给任何其他类。或者,如果您愿意,甚至可以直接通过Web驱动程序。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>1.2.3</version>
<scope>test</scope>
</dependency>
例:
具有WebDriver实例的基类:
public class ContextSteps {
private static boolean initialized = false;
private WebDriver driver;
@Before
public void setUp() throws Exception {
if (!initialized) {
// initialize the driver
driver = = new FirefoxDriver();
initialized = true;
}
}
public WebDriver getDriver() {
return driver;
}
}
其他通过pico-container DI访问webDriver的类。
public class OtherClassSteps {
private ContextSteps contextSteps;
// PicoContainer injects class ContextSteps
public OtherClassSteps (ContextSteps contextSteps) {
this.contextSteps = contextSteps;
}
@Given("^Foo step$")
public void fooStep() throws Throwable {
// Access WebDriver instance
WebDriver driver = contextSteps.getDriver();
}
}
希望能帮助到你。
我需要使用BEHAT在不同类的步骤之间共享数据。类似于(在cucumber-jvm步骤之间传递变量的良好实践)PicoContainer for cucumber。有这样的框架吗?我知道我可以使用静态成员,但可能是一些框架。
我有一个人[]有三个人(p1,p2,p3)。Person类有两个属性name和email。 我使用了以下代码。 但我不想这样用。我想使用两个组合框与相同的型号。我尝试使用DefaultComboBoxModel并重写getElementAt()方法,如下所示。 } 问题是如何使用相同的ComboBoxModel在一个JComboBox中添加Person[]的所有名称,并在另一个JComboBox中
是否可以在分支之间共享步骤并仍然运行分支特定的步骤?例如,开发和发布分支具有相同的构建过程,但上传到单独的S3存储桶。 我看到了这篇文章(Bitbucket Pipelines-多个分支具有相同的步骤),但它的步骤是相同的。
本文向大家介绍ASP.NET访问共享文件夹的详细步骤,包括了ASP.NET访问共享文件夹的详细步骤的使用技巧和注意事项,需要的朋友参考一下 假设找找看的ASP.NET程序在A服务器,索引文件在B服务器的ZzkIndex共享文件夹中,访问地址是\\192.168.18.18\ZzkIndex\。要实现就是在A服务器的ASP.NET程序中能读写共享文件夹\\192.168.18.18\ZzkIndex
null 在列出的3个选项中,只有最后一个可以使用projectile(可能还有其他Emacs包)。但我需要能够访问/修改文件从Windows以及,所以这不是一个可行的选择。 有没有人为此找到好的解决方案?
我正在思考架构组件/MVVM。 假设我有一个存储库、一个ViewModel和一个片段。我使用类作为包装器来公开网络状态,就像体系结构组件指南中建议的那样。 我的存储库目前看起来是这样的(为简洁起见进行了简化): 然后在ViewModel中,我还声明了一个可变LiveData: 最后,片段: 正如您所看到的,由于LiveData变量将在过程中重置(存储库将创建一个新实例),因此不会触发观察者会出现问