It is a continuation of the following.
As mentioned above, it is reprinted.
├─ src
├─ test
├─ java
| └─ jp.co.hoge.Project.E2ETest
| ├─ pageobject
| └─ steps
| └─ utils
└─ resources
└─ jp.co.hoge.Project.E2ETest
└─ feature files
PageObject A PageObject is an object that represents the relationship between a page and a user (regardless of the test). The following conditions are met.
PageObject basically means something that meets the above requirements, but due to development reasons, we did not make it completely compliant. For example, this time we have prepared a PageObject called BasePage as the base class of PageObject. Basically, this class is inherited when creating a new PageObject. This BasePage implements a public method for checking the existence of elements. Although the method in the above principle is contrary to returning PageObjects, I decided to implement the check for existence on each PageObject for convenience.
///PageObject Example
public class SearchPage extends BasePage {
public SearchPage(IOSDriver driver) {
super(driver);
}
@iOSXCUITFindBy(xpath = "//*[@name=\"Search\"]")
private IOSElement navigationBar;
@iOSXCUITFindBy(xpath = "//*[@name=\"Find an artist\"]")
private IOSElement textSearchField;
@iOSXCUITFindBy(accessibility = "Ranking")
private IOSElement ranking;
...
public SearchResultPage searchText(String keyword) {
textSearchField.setValue(keyword);
driver.hideKeyboard();
return new SearchResultPage(driver);
}
public SearchSuggestPage showSuggest(String keyword) {
textSearchField.setValue(keyword);
return new SearchSuggestPage(driver);
}
public Boolean existsNavigationBar() {
return checkVisibilityOfElement(navigationBar);
}
...
Feature The scenario is written in plain text. Here comes a syntax rule called Gherkin. Sample
Feature:Display the page to search for
Scenario:Press the Find tab
Launch the Given app and move to the search screen
Then on the search screen, "Search" is displayed in the header.
Steps Keyword You can use the keywords ** Given **, ** When **, ** Then **, ** And ** or ** But ** for each step. However, these are not taken into account when looking for step definitions.
Steps Argument You can pass arguments to the step definition. However, there are restrictions on the types that can be used. https://cucumber.io/docs/cucumber/cucumber-expressions/#parameter-types
// example feature
Scenario:Display the control panel when playing music
Tap the Given Search tab
And from text search"Kenshi YONEZU"Enter
...
// example steps definision
@Given("From text search{string}Enter")
public void Display Kenshi Yonezu from text search(String keyword) {
searchResultPage = searchPage.searchText(keyword);
}
Skip Test If there is a feature that you do not want to execute the test on CI, such as a step in the middle of development, you can skip the execution of the test by adding the ignore annotation.
@ignore
Feature:Advertising display
Recommended Posts