Настройка Zucchini для Java (Gradle) - PullRequest
0 голосов
/ 09 января 2019

У меня есть настройка Selenium на основе Java, которая использует Cucumber для определения и запуска тестов. В настоящее время это выполняется с использованием драйвера Chrome, но в идеале мы должны повторить тесты с использованием Firefox и IE (и, если возможно, параллельно), поскольку локальные пользователи используют все три. Я использую Gradle в качестве инструмента для сборки и хотел бы придерживаться этого.

Чтобы попытаться применить этот подход, я реализовал установку параллельного тестирования на основе JUnit, которая описана здесь , которая прекрасно работает и выполняет именно то, что я хочу. ОДНАКО, это не проходит через Cucumber, а напрямую в JUnit, и я не могу найти простой способ его адаптации.

Я нашел Цуккини , который, кажется, делает именно то, что я хочу. ОДНАКО документация по этому вопросу очень скудна, и с моим ограниченным опытом я не могу ее настроить - я новичок в тестировании, Selenium и Java и унаследовал эту среду, которую я пытаюсь расширить. Вот пример здесь , который почти работает для меня (не работает в Firefox, но это, скорее всего, мои настройки), но я не могу его реализовать. В основном в моей реализации код запускается, открывает драйвер и, кажется, немедленно закрывает его снова. Затем он возвращает исключение NullPointerException на первом этапе сценария (предположительно, так как он не может найти драйвер).

Мой файл функций:

Feature: Visit Google and do an example search

  Scenario: Navigate to the Google search homepage, search for "Cat", and check the first result is about cats
    Given I visit the Google search page
    When I enter the text "cat" into the search box
    And I click the search button
    Then I should see the top result mentioning cats

Мой установочный код (аналогично FirstZucchiniTest.java в примере репозитория):

package stepDefinitions;

import java.util.ArrayList;
import java.util.List;

import com.comcast.zucchini.AbstractZucchiniTest;
import com.comcast.zucchini.TestContext;
import net.dimaj.zucchini.utils.Constants;

import cucumber.api.CucumberOptions;
import cucumber.api.Scenario;
import cucumber.api.java.Before;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

@CucumberOptions(
        features = {"src/test/resources/features"},
        plugin = {"pretty", "json:target/cucumber-report/json/cucumber-report.json", "html:target/cucumber-report"},
        glue={"helpers","stepDefinitions"}
)

public class ZucchiniDefinitions extends AbstractZucchiniTest {
    @Override
    public List<TestContext> getTestContexts() {
        List<TestContext> rv = new ArrayList<TestContext>();

        TestContext chrome = new TestContext("chrome");
        chrome.set(Constants.CONTEXT_BROWSER, new ChromeDriver());
        rv.add(chrome);

        TestContext ff = new TestContext("firefox");
        ff.set(Constants.CONTEXT_BROWSER, new FirefoxDriver());
        rv.add(ff);

        return rv;
    }


    @Override
    public void cleanup(TestContext out) {
        WebDriver driver = out.get(Constants.CONTEXT_BROWSER);
        if (null != driver) {
            driver.quit();
        }
    }

}

Определения для посещения Google:

package stepDefinitions;

import com.comcast.zucchini.TestContext;
import cucumber.api.java.en.And;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
import org.openqa.selenium.WebDriver;
import pageFactory.examplePages.GoogleSearchHomepage;
import pageFactory.examplePages.GoogleSearchResultsPage;

import static net.dimaj.zucchini.utils.Constants.CONTEXT_BROWSER;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;

public class GoogleDefinitions {
    private WebDriver driver;

    public GoogleDefinitions (BaseDefinitions baseDefinitions) {

        this.driver = TestContext.getCurrent().get(CONTEXT_BROWSER);
        System.out.println("got driver");
    }

    @Given("^I visit the Google search page$")
    public void iVisitTheGoogleSearchPage() {
        GoogleSearchHomepage googleSearchHomepage = new GoogleSearchHomepage(driver);
        googleSearchHomepage.visit();
    }

    @When("^I enter the text \"([^\"]*)\" into the search box$")
    public void iEnterTheTextIntoTheSearchBox(String textToEnter) {
        GoogleSearchHomepage googleSearchHomepage = new GoogleSearchHomepage(driver);
        googleSearchHomepage.typeInSearchField(textToEnter);
    }

    @And("^I click the search button$")
    public void iClickTheSearchButton() {
        GoogleSearchHomepage googleSearchHomepage = new GoogleSearchHomepage(driver);
        googleSearchHomepage.clickSearchButton();
    }

    @Then("^I should see the top result mentioning cats$")
    public void iShouldSeeTheTopResultMentioningCats() {
        GoogleSearchResultsPage googleSearchResultsPage = new GoogleSearchResultsPage(driver);
        assertThat(googleSearchResultsPage.getTextOfResult(1).toLowerCase(), containsString("cat"));
    }
}

И, наконец, определения страниц для главной страницы Google:

package pageFactory.examplePages;

import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import pageFactory.SuperPage;

public class GoogleSearchHomepage extends SuperPage {

    @FindBy(css = ".gsfi[name='q']")
    public WebElement searchTextField;

    @FindBy(css = "[value='Google Search'][name='btnK']")
    public WebElement searchButton;

    public GoogleSearchHomepage(WebDriver driver) {
        super(driver);
    }

    public void typeInSearchField(String text) {
        searchTextField.sendKeys(text);
    }

    public GoogleSearchResultsPage clickSearchButton() {
        searchTextField.sendKeys(Keys.RETURN);
        return new GoogleSearchResultsPage(driver);
    }

    public GoogleSearchHomepage visit() {
        driver.get("https://www.google.co.uk/");
        System.out.println("Google acquired");
        return new GoogleSearchHomepage(driver);
    }


}

и страница результатов поиска Google:

package pageFactory.examplePages;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import pageFactory.SuperPage;

import java.util.List;

public class GoogleSearchResultsPage extends SuperPage {

    @FindBy(className = "r:first-of-type")
    public List<WebElement> searchTextField;

    public GoogleSearchResultsPage(WebDriver driver) {
        super(driver);
    }

    public String getTextOfResult(Integer resultNumberToGet) {
        return searchTextField.get(resultNumberToGet).getText();
    }

}

Константы соответствуют исходному репозиторию и выглядят следующим образом:

package net.dimaj.zucchini.utils;

public class Constants {
    public static final String CONTEXT_BROWSER = "browser";
    public static final String CONTEXT_SCENARIO = "scenarior";


}

У меня вопрос, почему эта настройка не работает?

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