2013-12-18 3 views
0

Я очень новичок в Selenium, и я начал автоматизировать процесс входа в систему. Для этой цели я использовал PageObjects. У меня есть LoginPage, который имеет метод, как это:Автоматизация процесса входа в систему с использованием Seleinum PageObjects

public MyHomePage login(String username,String password) 
{ 
    username.sendKeys(username); 
    password.sendKeys(password); 

    signInButton.click(); 
    return PageFactory.initElements(driver,MyHomePage.class); 
} 

Это хорошо работает с правильным именем пользователя и паролем. Но я не хочу повторять один и тот же код для обработки недопустимых случаев. Разумеется, для недействительных случаев возвращаемый объект будет таким же LoginPage. Хотелось бы, чтобы я мог кодировать мой метод login таким образом.

Любой способ передовой практики? Поскольку логин очень распространен, для моего случая должен быть лучший подход.

Или это я должен написать отдельный код для недопустимого случая?

ответ

1

Я бы refact часть, которая делает вход на другой метод, который может быть общим между логином и логином безуспешно, как например:

private void login(String username,String password){ 
    username.sendKeys(username); 
    password.sendKeys(password); 

    signInButton.click(); 
} 

public MyHomePage login(String username,String password) 
{ 
    login(username, password); 
    return PageFactory.initElements(driver,MyHomePage.class); 
} 

public LoginPage loginUnsuccessfully(String username,String password) 
{ 
    login(username, password); 
    return this; 
} 
1

Или даже получать более экстравагантным! Вы могли бы сделать обычай TestRunner который буквально находит все @Test методы, которые вы поставили в, то ваш TestRunner бы сказать

TestA Если не удается: retry.

Если TestA не удалось выполнить повторно: retry.

Если TestA снова не работает: это законный отказ.

С этой концепцией вам, очевидно, придется привязать ее к любому используемому программному обеспечению, которое вы используете. TestNG, jUnit и т. Д.

Это почти та же концепция, которую мы используем здесь, в компании, в которой я работаю.

1

Отдельных ваших элементов в класс элементов, например: MyHomePageElements .Ява.

Затем инициализируйте их при вызове класса MyHomePage.

MyHomePage.Java

public MyHomePage() { 
    PageFactory.initElements(driver, MyHomePageElements.class); 
} 

public void login(String username, String password) { 
    MyHomePageElements.username.sendKeys(username); 
    MyHomePageElements.password.sendKeys(password); 
    MyHomePageElements.signInButton.click(); 
} 

Затем в тестовом классе (или, если вы собираетесь использовать войти в систему много, поместите это где-то в качестве ссылки входа в систему, а не в качестве теста):

@Test 
public void adminlogin() { 
    MyHomePage homepage = new MyHomePage(); 
    homepage.login("admin", "[email protected]$$w0rd"); 
} 

Тогда если вам нужен неудовлетворительный случай:

@Test 
public void failedlogin() { 
    MyHomePage homepage = new MyHomePage(); 
    homepage.login("admin", "[email protected]$$w0rd"); 
    homepage.somemethodcheckingforfailure(); 
} 

Объяснение:

Идея состоит в том, что ваши методы, лежащие в основе тестового класса, должны быть неизменными, изменения в вашем тесте должны выполняться экономно, и если элементы со временем меняются через улучшения или изменения дизайна, все организовано таким образом, чтобы вы могли легко изменять вещи без написав свои методы и тесты. Я иду еще дальше и сохраняю свои имена пользователей, пароли, URL-адреса и т. Д. В файле свойств и отсылаю параметры оттуда. Если мне нужно несколько значений, я использую методы ввода параметров в зависимости от инструмента тестирования (JUnit и TestNG).

Смежные вопросы