对于本网站上任何格式问题或其他任何违反礼仪的事情表示道歉,这是我潜伏在过去几个月之后的第一篇文章,我正在处理的所有内容对我来说都是新鲜事。
我最近开始在Java / Cucumber / JUnit中编写一些selenium测试,并且遇到了一个我无法解决的问题。我知道问题是什么,但无法弄清楚如何真正改变我的测试来弥补它。以下是一些背景信息:
要素文件示例:
var employeeStocksFiltered = dbo.Entry(employee) .Collection(m => m.Stocks) .Query() .Where(m => ...) .ToList();
foreach (var stock in employeeStocksFiltered ) { }
StepDefs文件示例(我有四个这样的文件,测试网站的不同部分):
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
然后我还有一个formSubmissionFunctionalityTest.java文件,其中包含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();
}
}
等方法的所有实际代码。我还有一个setupTest.java文件,其中包含fillSubmitDemoFrom
和tearDown
等方法。
我遇到的问题是,每次执行测试时,都会打开四个浏览器会话而不是所需的单个浏览器。我知道这是因为@Before和@After注释在每次测试之前执行,而不是在整个套件之前执行。我认为最好的解决方案是使用@Before和@After的新文件,但这是我似乎无法弄清楚的部分。在每个文件中,setUp
是不同的,这是我认为问题的来源,但我不完全确定。
有没有人知道我可以重构我的测试的方式,以便它们共享相同的@Before和@After方法,而不会导致多个浏览器会话打开?提前谢谢
答案 0 :(得分:0)
问题实际上不是之前和之后,而是您管理WebDriver实例的方式。通常,您需要在单个内容中维护单个实例。你可以通过经典的signleton模式来做到这一点,或者你可以通过注射来做到这一点。
我强烈建议您查看The Cucumber for Java Book。它不会解决您将面临的所有挑战,但是当您使用Java工作时,它对于Cucumber来说是一本很好的书。第12章是关于在黄瓜中使用WebDriver以及使用注入来重用浏览器的讨论。