【问题标题】:running all cucumber scenarios for a feature in one browser session在一个浏览器会话中为一项功能运行所有黄瓜场景
【发布时间】:2017-01-19 06:44:24
【问题描述】:

我有以下功能,当一个场景完成执行时有 2 个场景,我希望 cucumbe 运行第二个场景。现在,当它完成执行一个场景时,它会打开浏览器的另一个线程并且不执行第二个场景。我不想打开另一个线程,我想在单个浏览器线程中执行第一个场景之后的第二个场景。

功能:添加新联系人 作为用户,我想使用联系人链接插入新联系人

场景大纲:插入新联系人 给定用户点击联系人链接 当用户单击链接时创建新联系人 用户输入名字为 并且用户输入姓氏为 并且用户输入电子邮件为 并且用户以 用户点击保存按钮 然后用户应该会看到消息“联系人已成功保存。”

  Examples:

  |first_name||last_name||email||Agency|
   |test2 |     |  test3       ||qa@incircuit.com||0000 - SURPLUS PROPERTY|

Scenario: create new user
        Given user clicks on create new user

下面是我的代码

public class insert_contact extends BasePage{
private static Initialize init;
private Insert_Contact contact=new Insert_Contact(driver);
public insert_contact(Initialize init) throws IOException {
    super(driver);
    init.Setup();
    init.getEnvironmentandCustomer();
}

@Given("^user clicks on contacts link$")
public void userClicksOnContactsLink() throws Throwable {
    contact.click_contacts_tab();
}
@When("^user clicks on link Create New Contact$")
public void userClicksOnLinkCreateNewContact() throws Throwable {

    contact.click_create_contact();
}

@And("^user enters first name as (.+)$")
public void userEntersFirstNameAsFirst_name(String fname) throws Throwable {
    contact.clickon_firstname();
    this.type(contact.first_name,fname);
}

@And("^user enters the last name as (.+)$")
public void userEntersTheLastNameAsLast_name(String lname) throws Throwable {
   contact.clickon_lastname();
   this.type(contact.last_name,lname);
}

@And("^user enters the Email as (.+)$")
public void userEntersTheEmailAsEmail(String email_address) throws Throwable {
    contact.cickon_email();
    this.type(contact.email,email_address);
}

@And("^user enters the Agency as (.+)$")
public void user_enters_Agency_as(String agency){
    contact.click_onAgency();
    this.type(contact.Agency,agency);
}

@And("^user click on save button$")
public void userClickOnSaveButton() throws Throwable {
   contact.clickon_Save();
}

@Then("^user should see message \"([^\"]*)\"$")
public void userShouldSeeMessage(String message) throws Throwable {
    Assert.assertEquals("The contact was successfully saved.",verifyTextPresent(By.id("success-message")));
}


@Given("^user clicks on create new user$")
public void userClicksOnCreateNewUser() throws Throwable {
    contact.click_onCreateNewUser();
}

}

【问题讨论】:

  • 请更新您的代码,这可能会有所帮助!!
  • 下一行没有在同一个浏览器上被点击 @Given("^user clicks on create new user$") public void userClicksOnCreateNewUser() throws Throwable { contact.click_onCreateNewUser();
  • @RehanShahid 您没有包含创建驱动程序的代码。请包含所有代码。

标签: cucumber-jvm


【解决方案1】:

您的问题的简单答案是,每个场景都会重新运行您的驱动程序创建代码,该代码会创建一个新的浏览器实例。我没有看到 @After 方法,因此第一个场景创建的浏览器实例永远不会在其上运行 quit() 方法,因此在第二个场景运行时它保持打开状态。

一般有两种处理方法。

  1. 在 @After 方法中关闭 (quit()) 浏览器实例,以便在第二个场景开始时创建一个新实例。

  2. 围绕驱动程序的创建进行测试,并且仅在 (driver == null) 时创建一个新实例。然后,第二个场景将重用与第一个场景相同的浏览器会话。请务必包括:

    driver.manage().deleteAllCookies();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多