12. public class CommonUserSteps {
public CommonUserSteps(WebDriver driver) {
...
}
public SearchPage onSearchPage() {
return searchPage;
}
public void loginAsCommonUser() {
User user = UserFactory.getCommonUser();
onSearchPage().authorize(user.getLogin, user.getPassword);
}
public void searchFor(String request) {
onSearchPage().searchFor(request);
}
public void shouldSeeSearchResults() {
assertTrue(onSearchPage().isSearchResultsBlockDisplayed());
}
}
14. public class SearchResultsTest {
private WebDriver driver = new FirefoxDriver();
private CommonUserSteps user = new CommonUserSteps(driver);
@Before
public void loadPage() {
driver.get("http://www.yandex.ru");
}
@Test
public void shouldSeeSearchResultsWhenLookingUp() {
user.searchFor("CodeFest");
user.shouldSeeSearchResults();
}
@After
public void closeDriver() {
driver.quit();
}
}
60. Checkbox
public class Checkbox extends TypifiedElement {
public WebElement getLabel(){...}
public String getLabelText(){...}
public String getText(){...}
public void select(){...}
public void deselect(){...}
public void set(boolean checked){...}
public boolean isSelected(){...}
}
61. Radio
public class Radio extends TypifiedElement {
public List<WebElement> getButtons(){...}
public WebElement getSelectedButton(){...}
public void selectByValue(String value){...}
public void selectByIndex(int index){...}
}
62. public class Select extends TypifiedElement {
public boolean isMultiple(){...}
Select
public List<WebElements> getOptions(){...}
public List<WebElement> getAllSelectedOptions(){...}
public WebElement getFirstSelectedOption(){...}
public void selectByVisibleText(String text){...}
public void selectByIndex(int index){...}
public void selectByValue(String value){...}
public void deselectAll(){...}
public void deselectByValue(String value){...}
public void deselectByIndex(int index){...}
public void deselectByVisibleText(String text){...}
}
63. Form
public class Form extends TypifiedElement {
public void fill(Map<String, Object> data){...}
public <T> void fill(T bean, Converter Converter){...}
protected WebElement findFiledByKey(String key){...}
protected void fillField(WebElement e, Object value){...}
public WebElement findFirstField(By by){...}
public List<WebElement> findFields(By by){...}
public List<WebElement> findSelectsBy(By by){...}
}
64. Form
public class SearchPage {
@FindBy(className = "b-domik")
private Form authorizationForm;
}
public class CommonUserSteps {
public void loginAsCommonUser() {
User user = UserFactory.getCommonUser();
HashMap<String, Object> userHash = convert(user);
onSearchPage().getAuthorizationForm.fill(userHash);
}
}
65. Table
public class Table extends TypifiedElement {
public List<WebElement> getHeadings(){...}
public List<String> getHeadingsAsString(){...}
public List<List<WebElement>> getRows(){...}
public List<List<WebElement>> getColumns(){...}
public WebElement getCellAt(int i, int j){...}
public List<Map> getRowsMappedToHeadings() {...}
public List<Map> getRowsMappedToHeadings(List<String> h){...}
public List<Map> getRowsAsStringMappedToHeadings(){...}
public List<Map> getRowsAsStringMappedToHeadings(List h){...}
}
66. Table
public class SomeSecretePage {
@FindBy(className = "b-secret")
private Table users;
}
public class SearchUserSteps {
public List<User> findAllUsers() {
Table usersTable = onSomeSecretPage().getUsersTable();
List<Map> hash = usersTable.getRowsMappedToHeadings();
List<User> users = convert(hash);
return users;
}
}
81. Матчеры в степах
public class CommonUserSteps {
public void shouldSeeSearchResults() {
assertThat(
onSearchPage().getSearchResults(), exist()
);
}
}
82. Матчеры в степах
public class CommonUserSteps {
public void shouldSeeSearchResults() {
assertThat(onSearchPage().getSearchResults(),
both(exist()).and(isDisplayed()));
}
}
83. Матчеры в степах
public class CommonUserSteps {
public void shouldSeeSearchResults(Matcher mch) {
assertThat(
onSearchPage().getSearchResults(), mch
);
}
}
84. Матчеры в тестах
@Test
public void shouldSeeSearchResultsWhenLookingUp() {
user.searchFor("CodeFest");
user.shouldSeeSearchResults(
both(exists()).and(isDisplayed())
);
}
85. Вывод ошибки
@Test
public void shouldSeeSearchResultsWhenLookingUp() {
user.searchFor("CodeFest");
user.shouldSeeSearchResults(
both(exists()).and(isDisplayed())
);
}
Expected: element existing on page
but: was <[[FirefoxDriver: firefox on
MAC (e3b28f2e-7aa7-
a241-8807-40df2a8e0b54)] -> ...]>
86. Именование элементов
@Block(@FindBy(className = "b-head-search"))
public class SearchResultBlock extends HtmlElement {
@Name("Список поисковых результатов")
@FindBy(id = "results")
private List<SearchResult> searchResults;
@FindBy(id = "info")
private TextBlock searchInfo;
}
87. Переопределение
public class SearchPage {
@Name(“Блок поисковых результатов”)
private SearchResultsBlock searchResultsBlock;
}
@Block(@FindBy(className = "b-head-search"))
public class SearchResultsBlock extends HtmlElement {
...
}
88. Вывод ошибки
@Test
public void shouldSeeSearchResultsWhenLookingUp() {
user.searchFor("CodeFest");
user.shouldSeeSearchResults(
both(exists()).and(isDisplayed())
);
}
Expected: element existing on page
but: was SearchResultBlock
90. Waiter Decorator
@Test
public void shouldSeeSearchResultsWhenLookingUp() {
user.searchFor("CodeFest");
user.shouldSeeSearchResults(
should(exists()).whileWaitingUntil(timeoutHasExpired())
);
}
Expected: while waiting for [30000] ms
element existing on page
but: was SearchResultBlock
91. Action Decorator
@Test
public void shouldSeeSearchResultsWhenLookingUp() {
user.searchFor("CodeFest");
user.shouldSeeSearchResults(
should(exists()).after(pageRefresh(driver))
);
}
Expected: after page refresh
element existing on page
but: was SearchResultBlock
92. Condition Decorator
@Test
public void shouldSeeSearchResultsWhenLookingUp() {
user.searchFor("CodeFest");
user.shouldSeeSearchResults(
should(isDisplayed()).inCase(exists());
);
}
Expected: element displayed on page
if element exists on page
but: was SearchResultBlock