假设我有以下功能文件:
我ogin.feature
功能:登录网站
场景:现场登录验证
家特色
功能:欢迎页面验证
场景:验证登录后出现的页面
在Home.feature文件中,我需要先执行Login.feature,然后调用home.feature.所以当我从运行器测试中执行home时,它会依次执行login,然后是home。
RunnerTest。Java语言
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(strict = false, features = {
"src/test/resources/Features/Home.feature",
}, glue = { "tests" }, plugin = "html:target/cucumber-reports", format = { "pretty",
"json:target/cucumber.json" }, tags = { "~@ignore" })
public class RunnerTest {}
每个特性背后都有一个在您的步骤定义中实现的方法,因此您不需要以这种方式编写您的特性,您只需要调用您已经实现的方法。
对于应用程序的常用功能(例如登录),最好的解决方案是使用助手方法。您可以将这些方法实现为全局方法,并在每个步骤定义文件中使用它们。
public void LoginUserGlobal(String user,String pass)抛出可丢弃的{LoginPageObjects LP=新的LoginPageObjects(driver);
LP.user().sendKeys(user);
LP.pass().sendKeys(pass);
LP.loginButton().click();
}
如果您需要在任何功能中使用它,您将按照以下方式进行编码:
@When("^User logs in with \"([^\"]*)\" and \"([^\"]*)\"$")
public void user_logs_in_with_something_and_something(String user, String pass) throws Throwable {
GlobalClassWhereIsYourLoginMethod Lin = new GlobalClassWhereIsYourLoginMethod (driver)
LoginUserGlobal(user,pass);
}
或者,如果它不是应用程序的常用部分,您将从已经实现的步骤定义方法调用它。
试试这个:
创建一个RunnerLogin
类来调用Login.feature
。
在步骤类中,在实现给定登录成功的方法中,执行以下操作:
@Given("^Login is successfully done$")
public void login_is_successfully_done() {
Thread T1 = new Thread(new Thread(() -> {
JUnitCore jExecFeature = new JUnitCore();
Result result = jExecFeature.run(RunnerLogin.class);
}));
T1.start();
T1.join();
}
您不需要从第二个功能html" target="_blank">调用第一个功能。您需要做的是在第二个功能中加入一个步骤,以便登录。它可以通过调用您在实现第一个特性时创建的代码来实现这一点。
第一个特性是您第一次实现登录时可能编写的东西。在执行此操作时,您将执行这些步骤调用的步骤和代码以使您登录。
您应该创建的代码类型是(对不起,所有示例都是ruby,我不做java)
然后您可以编写一个helper方法。
def login_as(user)
visit login_path
fill_in :email, with: user.email
fill_in :password, with: user.password
submit_form
end
现在在第二个功能中,您可以
Given I am an admin
When I login
并执行以下步骤:
Given 'I am an admin' do
# note create_user is a method you would have created when doing user
# registration/creation
@i = create_user(type: admin)
end
When "I login" do
login_as @i
end
在某个地方你会有一些助手方法
module StepHelperMethods
def create_user
...
return user
end
def login_as(user)
...
end
end
World StepHelperMethods
代码重用总是发生在一个低得多的级别上。理想情况下,您应该重新使用之前创建的助手方法,以使其他场景正常工作。您也可以直接调用步骤(嵌套步骤),但这是一件非常糟糕的事情。
问题内容: 我有以下JavaScript代码: 我如何确保仅在完成后调用? 问题答案: 指定一个匿名回调,并使function1接受它:
问题内容: 我按照https://golang.org/doc/code.html#Workspaces链接中的说明进行操作,并构建了我的第一个Go程序。 因此,我尝试使用以下说明创建库= https://golang.org/doc/code.html#Library 一切都很完美,直到构建hello.go,它给了我这个错误。 /hello.go:10:13:未定义:stringutil.Rev
我的项目目录如下所示: 在我的主要范围内。py,我从文档导入一个函数。py如下: 它工作正常。 如何在中导入相同的东西?我尝试了: 但我有一个错误:
我正在使用Maven SureFire,TestNG(扩展AbstractTestNGCucumber测试)和Cucumber,并且有几个功能文件,每个文件都有几个场景。我希望能够在一个功能文件中并行运行每个场景,但一次只能运行一个功能文件。这有可能吗? 举个例子: 我希望场景1a、1b和1c在功能文件1中并行运行。一旦这些完成,运行场景2a和功能2等的2b。 这是当前一次从所有功能文件运行所有方
问题内容: 基本上,如果我有任意函数的切片或数组,如何选择仅返回int的函数或仅选择采用int的函数? 我认为我需要使用反射包,但是仅仅阅读文档并不能真正帮助我准确地知道如何做。 问题答案: 该程序打印以a 为参数或返回a 的函数: 我认为代码是不言自明的
问题内容: 我正在尝试编写一个基本的go程序,该程序在另一个文件上调用函数,但该文件是同一包的一部分。但是,它返回: 这是源代码: : : 问题答案: 请阅读“如何编写Go代码”。 不要在您的中使用。软件包位于中。 对于或您需要将文件放在包目录中。 对于,您需要提供所有文件作为参数: 但是,您几乎应该始终使用或或(最好是使用前者,因为使用非主软件包时会引起混乱)