Здравствуйте!
Столкнулся стакой ситуацией - есть написаный фреймворк(или лучше даже назваить refapp) для ссоздание интеренет-магазинов. На этом рефапе создано много различных магазинов. Функциональность этих шопов где-то процентов на 70 одинаковая, а вот локаторы, в большинстве случаев, отличаються.
Первичная задача - автоматизировать смоук тесты…
Вопросы:
-
Лучше под каждый отдельный шоп писать всё или можно это каким-либо образом красиво организовать?
-
Если возможно организовать, то как?
Что пытался сделать:
- Для каждого шопа создал отдельный конфигурационный xml файл с набором тестов и параметрами(название бренда). Этот параметр передаю в каждом тесте. В методах проверяю какой бренд и если функциональность и локаторы совпадают с refapp, то отрабатывает деволтные методы. Если локаторы/функциональность другая, то пишу отдельно методы для них.
Пример теста:
@Test
@Parameters({"brand"})
public void testSuccessfulLogin(String brand) {
User user = new User()
.withEmail("emailv@gmail.com")
.withPassword("12345678");
app.getUserHelper().login(brand, user);
С тестом вроде всё хорошо, но сам метод - ужас.
public void login(String brand, User user) {
initLogin(brand);
fillLoginForm(brand, user);
submitLoginForm(brand);
}
private void submitLoginForm(String brand) {
if (brand.equals("shop1") || brand.equals("shop2") || brand.equals("shop3") || brand.equals("shop4") || brand.equals("shop5")) {
click(By.cssSelector("button[name=rm_login_login]"));
}
}
private void initLogin(String brand) {
if (brand.equals("shop1")) {
click(By.cssSelector("div .b-login_dropdown > span"));
} else if (brand.equals("shop2")) {
hoverOnElement(driver.findElement(By.cssSelector("span.b-login_dropdown-title.js-login_dropdown-title")));
click(By.cssSelector("div.b-login-tooltip"));
} else if (brand.equals("shop3")) {
hoverOnElement(driver.findElement(By.cssSelector("div.b-login_wide")));
} else if (brand.equals("shop4")) {
hoverOnElement(driver.findElement(By.cssSelector("span.b-login_dropdown-title.js-login_dropdown-title")));
} else if (brand.equals("sho5")) {
hoverOnElement(driver.findElement(By.cssSelector("div.b-login_wide.js-login_dropdown")));
}
}
Подскажите, пожалуйста, как рерали такую задачу, если у кого-то есть подобный опыт. И возможно ли вообще делать как в примере выше.
Спасибо