作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是Cucumber新手,正在设计框架。编写框架的好方法是什么。
到目前为止,我已经设计了这样的框架(页面对象模型)
Feature File
Given User is on home screen
Step Definition file
@Given("^User is on home screen$")
public void User_is_on_home_screen(String Username,String Pwd)
{
lp.enterDetails(Username,Pwd)
}
Page related java files (Includes all Methods by page wise,which is called by respective step definition files).
public class login{
/**
Locators
**/
public void enterDetails(String Username,String Pwd){
/**
steps
**/
}
我的问题是我们是否可以将这些方法包含在相应的页面定义文件中,而不是创建单独的 java 文件并将所有页面定位器存储在一个 java 文件中
Feature File
Given User is on home screen
Step Definition file
@Given("^User is on home screen$")
public void User_is_on_home_screen(String Username,String Pwd)
{
public void enterDetails(String Username,String Pwd){
/**
steps
**/
}
Page Locators java file (Includes all page locators
public class Locators{
/**
All Locators
**/
}
哪一个是标准且高效的?
最佳答案
是的,您可以在 Cucumber 中使用依赖项注入(inject),并使用依赖项将页面对象类注入(inject)到您的步骤定义
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-core</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
看起来像这样:
public class BaseStep {
private DeviceServiceImpl deviceService;
private DashboardScreen dashboardScreen;
public BaseStep() {
this.deviceService = new DeviceServiceImpl(Hooks.driver);
this.dashboardScreen = new DashboardScreen(Hooks.driver);
}
@Then("^I install application$")
public void iInstallApplication() {
dashboardScreen.scroll();
}
@Given("^I enable all network activity$")
public void iEnableAllNetworkActivity() {
}
}
此时您已找到页面上的所有元素:
/**
* @author Tomash Gombosh
*/
public class DashboardScreen extends AbstractScreen {
private static final AppElement SIGN_IN_BUTTON = new AppElement(
"Sign in button",
By.id(String.format("%s:%s", ApplicationProperties.ANDROID_APP_PACKAGE, "id/right_link")),
ScrollTo.NO,
true);
private static final AppElement SIGN_UP_BUTTON = new AppElement(
"Sign Up Button",
By.id(String.format("%s:%s", ApplicationProperties.ANDROID_APP_PACKAGE, "id/sign_button")),
ScrollTo.NO,
true);
public DashboardScreen(final AppiumDriver<MobileElement> driver) {
super(driver);
}
@Override
public boolean isDisplayed() {
waitToBeVisible(SIGN_IN_BUTTON);
scrollService.scrollDown();
return allRequiredElementDisplayed();
}
public void tapLogin() {
isDisplayed();
tap(SIGN_IN_BUTTON);
}
public void tapSignIn() {
tap(SIGN_UP_BUTTON);
}
public void scroll() {
scrollService.scrollDown();
}
}
这对你有帮助吗?或者需要更多解释?
关于java - Cucumber框架的好写法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60316671/
我正在尝试更改 NSAttributedString 中的写入方向。但是,我真的很难弄清楚该怎么做。 CTFontRef fontRef = CTFontCreateWithName((CFStrin
环境准备 数据库版本:MySQL 5.7.20-log 建表 SQL DROP TABLE IF EXISTS `t_ware_sale_statistics`; CREATE TABLE `t_wa
我确定有一种更惯用的 ruby 方式来编写下面的代码: @var = obj['blah'] unless obj['blah'].nil? 我有很多事情要做(见下文),一定有更好的方法! @nu
我是一名优秀的程序员,十分优秀!