如何使黄瓜测试步骤仅在Chrome上运行一半,而其余步骤在不同浏览器上运行?

时间:2019-05-06 11:48:01

标签: javascript cucumber cucumberjs

我的黄瓜测试有多个步骤。例如,如下所示的测试:

Given I navigate to my setup application
And I published an article
When I open client website
Then I can see the published article

步骤1和步骤2是设置步骤,需要在设置网站上运行,并且只能在chrome上运行一次才能创建方案的设置。完成后,则需要在客户端网站上的不同浏览器/设备(IE,Chrome,Firefox,Safari,Mobile)上检查step3和Step4。

我的框架使用Cucumber和JavaScript。我如何才能在黄瓜中实现这一点,即场景中的某些步骤只能在chrome上运行一次,其余步骤应该在不同的设备和浏览器上运行?

我相信我不能使用``之前和之后''钩子,因为每个测试的设置步骤都不同,但是,在框架中所有测试运行之前和之后,钩子也不能使用背景,因为背景将再次成为背景每个功能文件中的所有测试。但就我而言,每个测试都有不同的设置。

2 个答案:

答案 0 :(得分:0)

在这种特定情况下,为什么需要前两个步骤才能通过浏览器。您当然知道发布的文章只是您数据存储中的记录。当然,您可能会遇到一些场景,这些场景表明您可以使用网络界面来创建文章,例如

Scenario: Create article
  Given I can create an article
  When I create an article
  Then I should have created an article

但是一旦有了这些,就不再需要每次创建文章时都通过Web界面。相反,您可以通过以下方式来简化该过程:

1)直接调用创建商品的服务(首选) 2)直接写入数据库以创建适当的文章记录

所以您的情况将变成类似

Scenario: View my published article
  Given I have published an article  # shortcuts and does not use a browser
  When I view my article             # uses a browser
  Then ...

现在,您的方案仅使用一个浏览器,并且您的问题已经消失。现在,您可以使用多种技术来确保可以在各种浏览器中查看文章。

这种给Givens快捷方式的模式,并且仅将UI用于When's,具有使场景变得更快的附加好处。您不能为每个Given轻松地使用它,诸如“我已登录”之类的某些内容需要通过浏览器浏览,但是绝大多数Givens可能是捷径。

答案 1 :(得分:-1)

不确定这是个好主意,但这就是您想要的:

    Random rng = new Random();
    Scanner input = new Scanner(System.in);
    System.out.println("Select a number you want to roll");
    int choice = input.nextInt();
    System.out.println("You feelin' lucky?\nHow many tries until you get " + choice);
    int tries = input.nextInt();
    int count = 0;
    int chance = rng.nextInt((100)+1);
        while (choice != chance) {
            System.out.println(chance);
            count++;

    }
    System.out.println("You won! It only took " + count + " tries.");
}

请参见https://cucumber.io/docs/guides/10-minute-tutorial/#using-variables-and-examples

在步骤定义中,您必须设置适当的webdriver。选中https://github.com/bonigarcia/webdrivermanager