Код привязки
В спредыдущей статье мы создали пару сценариев. Теперь нам нужно создать код привязки для каждого шага.
Каждый шаг отвечает определенному методы, которые маркируются определенными аннотациями. Смотрите “src/java/cucumber.jvm.parallel/cucumber/stepdefs”.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
public class SearchStepDefs { private SearchPageObject searchPage; private WebDriver webDriver; public SearchStepDefs(SharedDriver webDriver) { this.webDriver = webDriver; searchPage = new SearchPageObject(webDriver); } @Given("^I am on the website '(.+)'$") public void I_am_on_the_website(String url) throws Throwable { webDriver.get(url); } @When("^I submit the search term '(.+)'$") public void I_submit_the_search_term(String searchTerm) throws Throwable { searchPage.enterSearchTerm(searchTerm); searchPage.submitSearch(); } @When("^accept the first search result$") public void accept_the_first_search_result() throws Throwable { searchPage.acceptSearchResult(0); //wait up to 5 seconds for redirect to complete for(int i=0; i<5; i++) { if(!webDriver.getCurrentUrl().contains("google")) { break; } Thread.sleep(1000); } } @Then("^I should be on the page '(.+)'$") public void I_should_be_on_the_page(String url) throws Throwable { assertEquals(url, webDriver.getCurrentUrl()); } |
Можно заметить, что мы используем обьект ShareDriver для коммуникации с браузером. Его использование основывается на одном с примеров для распределения одной сессии браузера между всеми тестами. Это позволяет избавится от необходимости запуска обьекта WebDriver для каждого теста, что влияет на скорость выполнения. В нашем случае – создание одной сессии на поток. Класс ShareDriver находится в “/src/test/java/cucumber.jvm.parallel/cucumber”.
Page Objects
Следующий код показывает создание класса “SearchPageObject”, который представляет страницу поиска Google и все ее элементы – “/src/test/java/cucumber.jvm.parallel/pageobjects”.
Это необязательно, но это хорошая практика использования Page Object паттерна для облегчения поддержки больших проектов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
package cucumber.jvm.parallel.pageobjects; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import java.util.List; public class SearchPageObject { private static WebDriver webDriver; public SearchPageObject(WebDriver webDriver) { this.webDriver = webDriver; } private By searchTermField = By.id("gbqfq"); private By submitSearch = By.id("gbqfb"); private By searchResults = By.id("search"); public void enterSearchTerm(String searchTerm) { webDriver.findElement(searchTermField).sendKeys(searchTerm); } public void submitSearch() { webDriver.findElement(submitSearch).click(); } public void acceptSearchResult(int id) { List<WebElement> searchResultList = webDriver.findElement(searchResults).findElements(By.tagName("li")); searchResultList.get(id).findElements(By.tagName("a")).get(0).click(); } } |
Выше Вы можете увидить определение трех контрлов страницы и действия, выполняемые над страницей.