用平静BDD +硒+的JUnit automation.i有黄瓜BDD的经验,我们可以轻松地共享steps.i要实现宁静一样。为简单起见,让我们说我们有一个登录页面,并在后面的页面说名称检查页面。我创建了个人POM这两个页面,然后相应的步骤定义(@steps),并想使用在一个脚本这两个步骤定义类定义@steps。可以这样做?
public class AA_NameCheck{
@Managed(driver="edge",clearCookies=ClearCookiesPolicy.BeforeEachTest)
WebDriver driver;
@Steps
StepsLoginPage stepL;
StepsNameCheckPage stepN;
@Test
public void NameCheck_ValidUser() throws InterruptedException{
stepL.Launch();
stepL.Login_ValidCredential();
stepN.Enter_NameDetails();
}
}
stepL.Login_validCredentials()
完成浏览器靠拢,因此后例外发生在上Name_EnterDetails()
方法
只是想知道的任何其他方法是可能的共享步骤是什么?
分享POM和步骤定义,请看看
POM的名称检查页:
public class NameCheckPage extends PageObject {
public NameCheckPage(WebDriver driver) {
super(driver);
}
Actions action=new Actions(getDriver());
@FindBy(id="xx")
public WebElementFacade EngName;
@FindBy(id="xx")
public WebElementFacade SecondEngName;
@FindBy(id="xx")
public WebElementFacade ThirdEngName;
@FindBy(xpath="xx")
public List<WebElementFacade> NameCheckBtns;
@FindBy(id="xx")
public WebElementFacade PreliminaryStatusChk;
public void Enter_FirstEngName() {
EngName.isVisible();
EngName.sendKeys("xylon");
}
public void Enter_EnglishName(String name) {
EngName.isVisible();
EngName.sendKeys(name);
}
public void Enter_SecEngName() {
SecondEngName.isVisible();
SecondEngName.sendKeys("xylonone");
}
public void Enter_ThirdEngName() {
ThirdEngName.isVisible();
ThirdEngName.sendKeys("xylontwo");
}
public void Enter_FirstEngNameone() {
EngName.isVisible();
EngName.sendKeys("xylo");
}
public void Enter_SecEngNameone() {
SecondEngName.isVisible();
SecondEngName.sendKeys("xyloone");
}
public void Enter_ThirdEngNameone() {
ThirdEngName.isVisible();
ThirdEngName.sendKeys("xylotwo");
}
public void AddCompany() {
action.click(NameCheckBtns.get(1)).perform();
}
public void AddSecondCompany() {
action.click(NameCheckBtns.get(2)).perform();
}
public void PrelimCheck() throws InterruptedException {
for(WebElement btns:NameCheckBtns) {
System.out.println("Buttons :"+btns.getText());
}
System.out.println(NameCheckBtns.get(4).getText());
JavascriptExecutor js=(JavascriptExecutor)getDriver();
js.executeScript("arguments[0].scrollIntoView();", NameCheckBtns.get(4));
action.click(NameCheckBtns.get(4)).perform();
PreliminaryStatusChk.isVisible();
System.out.println(PreliminaryStatusChk.getText());
}
为登录页面步骤定义:
public class StepsLoginPage extends ScenarioSteps {
private static final long serialVersionUID = 1L;
LoginPage login;
@Step
public void Launch() {
login.Launch();
}
@Step
public void Login_ValidCredential() {
login.Launch();
login.Enter_Username();
login.Enter_Password();
login.Click_LoginBtn();
//tried using return but of no help the browser still closes
//return new NameCheckPage(login.getDriver());
}
对于名称检查页面步骤定义:
public class StepsNameCheckPage extends ScenarioSteps{
private static final long serialVersionUID = 1L;
NameCheckPage namechk;
@Step
public void Enter_NameDetails() throws InterruptedException {
namechk.Enter_FirstEngName();
namechk.AddCompany();
namechk.Enter_SecEngName();
namechk.AddCompany();
namechk.Enter_ThirdEngName();
namechk.PrelimCheck();
}
测试:
public class AA_NameCheck{
@Managed(driver="edge",clearCookies=ClearCookiesPolicy.BeforeEachTest)
WebDriver driver;
@Steps
StepsLoginPage stepL;
StepsNameCheckPage stepN;
@Test
public void NameCheck_ValidUser() throws InterruptedException{
stepL.Launch();
stepL.Login_ValidCredential();
stepN.Enter_NameDetails();
}
}
告诉你的代码应该可以正常工作,所以我怀疑问题是其他地方。
当您使用两个类与注释步骤@Steps
你应该有:
@Steps
StepsLoginPage stepL;
@Steps
StepsNameCheckPage stepN;
在你的情况下第二类为null。