【问题标题】:How can I avoid annotations executing before every test?如何避免在每次测试之前执行注释?
【发布时间】:2015-09-01 14:58:05
【问题描述】:

对于任何格式问题或任何其他违反本网站礼仪的内容,这是我潜伏了几个月后的第一篇文章,我正在使用的所有内容对我来说都是全新的。

我最近开始在 Java/Cucumber/JUnit 中编写一些 selenium 测试,但遇到了一个我无法解决的问题。我知道问题出在哪里,但不知道如何真正改变我的测试来解决它。以下是一些背景信息:

功能文件示例:

Feature: Form Submission functionality 

@Run
Scenario: Submitting the demo form with correct details is succesful
Given I am on the demo page
When I submit the demo form with valid information
Then the thank you page is displayed

StepDefs 文件示例(我有四个这样的文件,测试网站的不同部分):

package testFiles.stepDefinitions;

import testFiles.testClasses.formSubmissionFunctionalityTest;
import cucumber.api.java.en.*;
import cucumber.api.java.After;
import cucumber.api.java.Before;

public class formSubmissionFunctionalityStepDefs {

    private formSubmissionFunctionalityTest script = new formSubmissionFunctionalityTest();

    @Before
    public void setUpWebDriver() throws Exception {
        script.setUp();
    }

    @Given("^I am on the demo page$")
    public void i_am_on_the_demo_page() throws Throwable {
        script.goToDemoPage();
    }

    @When("^I submit the demo form with valid information$")
    public void i_submit_the_demo_form_with_valid_information() throws Throwable {
        script.fillSubmitDemoForm();
    }

    @Then("^the thank you page is displayed$")
    public void the_thank_you_page_is_displayed() throws Throwable {
        script.checkThankYouPageTitle();
    }

    @After
    public void tidyUp() {
        script.tearDown();
    }
}

然后我还有一个 formSubmissionFunctionalityTest.java 文件,其中包含诸如fillSubmitDemoFrom 等方法的所有实际代码。我还有一个 setupTest.java 文件,其中包含 tearDownsetUp 等方法。

我遇到的问题是,每次执行测试时,都会打开四个浏览器会话,而不是打开所需的单个浏览器。我知道这是因为 @Before 和 @After 注释在每次测试之前执行,而不是在整个套件之前执行。我认为最好的解决方案是创建一个带有@Before 和@After 的新文件,但这是我似乎无法弄清楚的部分。在每个文件中,script 是不同的,这就是我认为问题所在,但我并不完全确定。

有谁知道我可以重组我的测试的方法,以便它们都共享相同的@Before 和@After 方法,而不会导致打开多个浏览器会话?提前谢谢你

【问题讨论】:

  • 这是你的意思吗? stackoverflow.com/questions/18856458/…
  • 谢谢,但不是我真正想要的。我想我正在寻找的解决方案将涉及使用@Before@After 注释,但是以不同方式设置类以允许所有测试使用一组注释而不是在每个测试类中使用它们,从而导致多个浏览器运行测试时打开

标签: java testing selenium-webdriver junit cucumber-jvm


【解决方案1】:

问题不在于之前和之后,而在于您管理 WebDriver 实例的方式。通常,您需要在单例之类的内部维护它的单个实例。您可以通过经典的 signleton 模式来做到这一点,也可以通过注入来做到这一点。

我强烈建议您查看The Cucumber for Java Book。它不会解决您将面临的所有挑战,但是当您在 Java 中工作时,它对于 Cucumber 来说是一本很棒的书。第 12 章是关于在 cucumber 中使用 WebDriver 并讨论使用注入来重用浏览器。

【讨论】:

    猜你喜欢
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    相关资源
    最近更新 更多