Огурец и WebDriver, открывая chrome, когда это не нужно - PullRequest
2 голосов
/ 27 января 2020

Я начинаю с огурец , следуя некоторым учебникам и тому подобное. У меня есть два файла с характеристиками, один с базовыми c материалами, которые вы видите на огурца "start start" , другой из WebDriver "start start" .

The тесты выполняются успешно, но огурец открывает браузер даже для тех функций / шагов, которые его не запрашивают.

project
|--src/test/java/packages
                   |--StepDefinitions.java
                   |--RunCucumberTest.java
                   |--GoogleSearchSteps.java
|--src/test/resources/packages
                        |--google_search.feature
                        |--is_it_friday_yet.feature

is_it_friday_yet.feature:

Feature: Is it Friday yet?
  Everybody wants to know when it's Friday

  Scenario Outline: Today is or is not Friday
    Given today is "<day>"
    When I ask whether it's Friday yet
    Then I should be told "<answer>"

  Examples:
    | day            | answer |
    | Monday         | Nope   |
    | Tuesday        | Nope   |
    | Wednesday      | Nope   |
    | Thursday       | Nope   |
    | Friday         | YES    |
    | Saturday       | Nope   |
    | Sunday         | Nope   |
    | 12345                  | Nope   |
    | Icecream       | Nope   |

google_search.feature:

Feature: Google Search Cheese
  Example of how to test web pages with cucumber

    Scenario: Finding some cheese
   Given I am on the Google search page
   When I search for "Cheese!"
   Then the page title should start with "cheese"

StepsDefinition. java

import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;

import static org.junit.Assert.*;


class IsItFriday {
    static String isItFriday(String today) {
        return "Friday".equals(today) ? "YES" : "Nope";
    }
}

public class StepDefinitions {

    private String today;
    private String actualAnswer;

    @Given("today is {string}")
    public void today_is(String today) {
        this.today = today;
    }

    @When("I ask whether it's Friday yet")
    public void i_ask_whether_it_s_Friday_yet() {
        actualAnswer = IsItFriday.isItFriday(today);
    }

    @Then("I should be told {string}")
    public void i_should_be_told(String expectedAnswer) {
        assertEquals(expectedAnswer, actualAnswer);
    }

GoogleSearchSteps. java

import io.cucumber.java.After;
import io.cucumber.java.Before;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;

public class GoogleSearchSteps {

    private WebDriver driver;

    @Before
    public void createDriver() {
        System.setProperty("webdriver.chrome.driver","mypath\\chromedriver_win32\\chromedriver.exe");
        driver = new ChromeDriver();
    }

    @Given("I am on the Google search page")
    public void i_am_on_the_Google_search_page() {
        driver.get("https:\\www.google.com");
    }

    @When("I search for {string}")
    public void i_search_for(String query) {
        WebElement element = driver.findElement(By.name("q"));
        // Enter something to search for
        element.sendKeys(query);
        // Now submit the form. WebDriver will find the form for us from the element
        element.submit();
    }

    @Then("the page title should start with {string}")
    public void the_page_title_should_start_with(String titleStartsWith) {
        // Google's search is rendered dynamically with JavaScript
        // Wait for the page to load timeout after ten seconds
        new WebDriverWait(driver, 10L).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                return d.getTitle().toLowerCase().startsWith(titleStartsWith);
            }
        });
    }

    @After()
    public void closeBrowser() {
        driver.quit();
    }

Тесты работают нормально, они в основном копируются и вставляются из учебники с несколькими модификациями, и они также успешно работают, проблема в том, что окно браузера открывается для каждого теста.

Итак, как я могу сделать так, чтобы WebDriver использовался только для функции GoogleSearch ?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 27 января 2020

Чтобы использовать WebDriver только для сценария функции поиска Google ios, вы должны использовать условный хук . Вы можете связать свой Before хук со следующим выражением тега:

@Before("@browser")
public void createDriver() {
...
}

и в файле объектов:

@browser
Feature: Google Search Cheese
  Example of how to test web pages with cucumber
  ...
1 голос
/ 27 января 2020

Ваша аннотированная функция @Before будет порождать новый экземпляр WebDriver для каждого теста.

Вы можете пропустить его с чем-то вроде

@Before
public void createDriver(Scenario scenario) {
    if(!scenario.getName().equals("GoogleSearch")){
        System.setProperty("webdriver.chrome.driver","mypath\\chromedriver_win32\\chromedriver.exe");
        driver = new ChromeDriver();
    }  
}

Примечание: вам нужно передать scenario к createDriver() методу.

...