Почему мой браузер IE запускается дважды с Selenium и Cucumber? - PullRequest
0 голосов
/ 17 апреля 2019

Я пишу очень простой тест автоматизации с Selenium-Cucumber, который запускает браузер IE и закрывает его в конце.

Проблема в том, что браузер запускается дважды.

Тест не имеет ничего, кроме нескольких System.out утверждений.Я новичок в тестировании автоматизации на selenium и Cucumber и не могу понять, почему он запускается дважды.

Пожалуйста, руководство.

BrowserConfig.java

public class BrowserConfig {

    private static final String IE_DRIVER_EXE = "drivers/IEDriverServer.exe";
    private static final String WEBDRIVER_IE_DRIVER = "webdriver.ie.driver";
    private static final String BASE_URL = "https://www.google.com";

    public static WebDriver getIEWebDriver() {
        String filePath = ClassLoader.getSystemClassLoader().getResource(IE_DRIVER_EXE).getFile();
        System.setProperty(WEBDRIVER_IE_DRIVER, filePath);
        InternetExplorerOptions options = new InternetExplorerOptions().requireWindowFocus();
        options.setCapability(INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
        options.setCapability(ENABLE_ELEMENT_CACHE_CLEANUP, true);
        options.setCapability(IE_ENSURE_CLEAN_SESSION, true);
        options.setCapability(ACCEPT_SSL_CERTS, true);
        options.setCapability("nativeEvents", false);
        options.setCapability(INITIAL_BROWSER_URL, BASE_URL);
        WebDriver driver = new InternetExplorerDriver(options);
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        return driver;
    }

    public static void releaseResources(WebDriver driver) {
        if (null != driver) {
            driver.close();
            driver.quit();
        }
    }

}

TestRunner.java

@RunWith(Cucumber.class)
@CucumberOptions(
        plugin = {"pretty", "json:target/cucumber-reports/cucumber.json"},
        features = {"src/test/resources/features"})
public class TestRunner extends ApplicationTests {

}

LoginStep.java

@Ignore
public class LoginStep {

    WebDriver driver;

    @Before
    public void setup() {
        if (this.driver == null) {
            this.driver = BrowserConfig.getIEWebDriver();
        }
    }

    @After
    public void cleanUp() {
        BrowserConfig.releaseResources(driver);
    }

    @Given("^The user is on the Login page$")
    public void doLogin() {
        System.out.println("The user is on the Login page");
    }

    @When("^The user enters the correct credentials on the Login page$")
    public void setWelcomePage() {
        System.out.println("The user enter the correct credentials on the Login page");
    }

    @Then("^The user is displayed Welcome page$")
    public void validate() {
        System.out.println("The user is displayed Welcome page");
    }

}

HelpStep.java

@Ignore
public class HelpStep {

    WebDriver driver;

    @Before
    public void setup() {
        if (this.driver == null) {
            this.driver = BrowserConfig.getIEWebDriver();
        }
    }

    @After
    public void cleanUp() {
        BrowserConfig.releaseResources(driver);
    }

    @When("^The user clicks on the Help menu link from the Welcome page$")
    public void setWelcomePage() {
        System.out.println("The user clicks on the Help menu link from the Welcome page");
    }

    @Then("^The user is displayed Help page$")
    public void validate() {
        System.out.println("The user is displayed Help page");
    }

}

help.feature

Feature: Check that the user is able to navigate to Help page

  Background:
    Given The user is on the Login page
    When The user enters the correct credentials on the Login page
    Then The user is displayed Welcome page

  Scenario:
    When The user clicks on the Help menu link from the Welcome page
    Then The user is displayed Help page

pom.xml

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>cucumber-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>cucumber-demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <cucumber.version>4.2.3</cucumber.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-spring</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <testFailureIgnore>true</testFailureIgnore>
                </configuration>
            </plugin>
            <plugin>
                <groupId>net.masterthought</groupId>
                <artifactId>maven-cucumber-reporting</artifactId>
                <version>3.14.0</version>
                <executions>
                    <execution>
                        <id>execution</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <projectName>${project.artifactId}</projectName>
                            <outputDirectory>${project.build.directory}/cucumber-reports</outputDirectory>
                            <cucumberOutput>${project.build.directory}/cucumber-reports/cucumber.json</cucumberOutput>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

Потому что вы инициализируете и дважды вызываете свой драйвер в файлах функций.

Background часть вашего файла функций инициализирует браузер сначала в LoginStep.java, затем ваш Scenario также инициализирует браузер в HelpStep.java.

Я предпочитаю использовать глобальный класс Hooks.java для @Before и @After перехватчиков и вставлять драйвер между различными .java классами.

0 голосов
/ 24 апреля 2019

Нашел решение. Приведенный ниже пример кода не совпадает с исходным сообщением, но это устраняет проблему. Добавлен новый класс "Hooks.java", который содержит общие шаги и удален "Фон" из файлов объектов. Это помогло решить проблему.

Hooks.java

public class Hooks {

    public static WebDriver driver;

    @Before
    public void setUp() {
        System.out.println("Into the setup method of AccountStep...");
        driver = BrowserConfig.getDriver();
    }

    @After
    public void cleanUp() {
        System.out.println("Into the cleanUp method of AccountStep...");
        if (null != driver) {
            driver.close();
            driver.quit();
        }
    }

}

help.feature

Feature: Check that the user is able to navigate to Help page

  Scenario:
    Given The user is on the Help page
    When The user clicks on the links within the Help page
    Then The user is navigated to that Help section

HelpStep.java

@Ignore
public class HelpStep {

    private WebDriver driver;

    public HelpStep() {
        this.driver = Hooks.driver;
    }

    @Given("^The user is on the Help page$")
    public void onPage() {
        System.out.println("The user is on the Help page");
    }

    @When("^The user clicks on the links within the Help page$")
    public void clickLinks() {
        System.out.println("The user clicks on the links within the Help page");
    }

    @Then("^The user is navigated to that Help section$")
    public void validate() {
        System.out.println("The user is navigated to that Help section");
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...