SQA

We dont create software, We make it better...

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Selenium - первые шаги

Печать PDF

newbig-logoЦель этой статьи помочь таким же новичкам как я быстро начать работу с Selenium. В статье я специально не касался технических деталей кода. Пусть это останется поводом для следующих публикаций. Я надеюсь, Гуру этого замечательного тула меня вежливо поправят, если я где-нибудь ошибся или сделал не по "классике". Может быть, кто-нибудь напишет статью, которая во всей полноте покажет возможности Selenium. Всех читателей милости прошу на форум для обсуждения Selenium.

 

Мое первое знакомство с Selenium состоялось несколько лет назад, когда в отдел тестирования поступила задача "пощупать" различные тулы для автоматизированного тестирования и представить руководству отчет о том, что они могут, подходят ли они ряду наших проектов и, конечно же, сколько стоят. Мы поделили тулы между сотрудниками отдела, мне достался Selenium. Автоматизация тестирования на тех проектах, где я работал, касалась меня вскользь. QTP, Rational Robot, Rational FT и даже WATIR эти программы мне были знакомы практически, но только самые основы. С Selenium я раньше не сталкивался.

Установка.

В качестве IDE для работы с Selenium я выбрал Eclipse. Также понадобятся Maven и Maven2 Eclipse plugin, библиотеки JUnit-4.4. И конечно же, нам понадобится сам Selenium.

Selenium состоит из:

Установка Selenium.

Как я говорил раньше, Selenium состоит из трех основных частей:

  • Selenium IDE это плагин к FireFox, который позволяет автоматически записывать, редактировать и отлаживать скрипты, используя FireFox.
  • Selenium Core это среда выполнения тестов. Тесты выполняются в браузере, эмулируя действия пользователей.
  • Selenium RC предназначен для написания тестов на различных языках программирования включая Java, C#, Ruby и другие.

 

Распакуем Selenium RC и Selenium Core в папку в D:\Selenium. Установим плагин к FireFox  Selenium IDE. Проверим запуск Selenium server. Для этого переходим в каталог D:\selenium\selenium-remote-control-1.0.1-dist\selenium-server-1.0.1\.

Сервер запускается командой java -jar selenium-server.jar. Было бы хорошо сделать простой start.bat  файл, содержащий приведенную выше команду запуска.

После того как сервер запустился, переходим к установке Maven и Eclipse c Maven2 Eclipse plugin.

Установка Maven и Eclipse c Maven2 Eclipse plugin.

Хочу еще раз предупредить уважаемых читателей, что все, что касается Eclipse, Maven, написания pom файлов является для меня чем-то вроде плясок с бубном. Всю информацию я почерпнул из интернета и не останавливался для ее глубокого изучения, так как важно было скорее запустить свой первый автоматический тест на Selenium. Однако полученных сведений вполне для этой цели хватило.

Скачиваем apache-maven-2.2.1.zip. разархивируем его на C:\. Не забываем в Path добавить C:\apache-maven-2.2.1\bin.

В командной строке запускаем mvn install.  В результате появляется папка C:\Documents and Settings\<username>\.m2

Распаковываем Eclipse. Запускаем его и идем в Help -> Software Updates -> Available Software.

Нажимаем Add Site. В поле Location вводим http://m2eclipse.sonatype.org/update/ и нажимаем OK.

В результате должен появиться список доступных для установки пакетов. Выбираем Maven Integration и нажимаем Install. Далее соглашаемся со всем, что скажет нам Eclipse.

Наш первый тест на Selenium

В качестве примера для тестирования возьмем форму стандартную форму логина.

login

В Eclipse нам необходимо создать три простых maven проекта.

tests_core - это основа нашего будущего фреймворка.

Пример pom.xml для этого проекта:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.myorg.selenium</groupId>

<artifactId>tests_core</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>tests_core</name>

<url>http://maven.apache.org</url>

<parent>

<artifactId>tests_pom</artifactId>

<groupId>com.myorg.selenium</groupId>

<version>0.0.1-SNAPSHOT</version>

</parent>

<modules>

</modules>

<dependencies>

</dependencies>

</project>

 

My_tests - здесь будут только наши тесты

Пример pom.xml для этого проекта:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.myorg.selenium</groupId>

<artifactId>My_tests</artifactId>

<name>My_tests</name>

<version>0.0.1-SNAPSHOT</version>

<parent>

<artifactId>tests_pom</artifactId>

<groupId>com.myorg.selenium</groupId>

<version>0.0.1-SNAPSHOT</version>

</parent>

<dependencies>

<dependency>

<groupId>com.myorg.selenium</groupId>

<artifactId>tests_core</artifactId>

<version>0.0.1-SNAPSHOT</version>

<scope>compile</scope>

</dependency>

</dependencies>

<dependencyManagement>

<dependencies>

</dependencies>

</dependencyManagement>

</project>

 

tests_pom - в этом проекте будут определены все зависимости и связи.

Пример pom.xml для этого проекта:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.myorg.selenium</groupId>

<artifactId>tests_pom</artifactId>

<packaging>pom</packaging>

<name>tests_pom</name>

<version>0.0.1-SNAPSHOT</version>

<modules>

<module>../My_tests</module>

<module>../tests_core</module>

</modules>

<dependencies>

<dependency>

<groupId>org.seleniumhq.selenium.client-drivers</groupId>

<artifactId>selenium-java-client-driver</artifactId>

<version>1.0.1</version>

<type>jar</type>

<scope>compile</scope>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.4</version>

<type>jar</type>

<scope>compile</scope>

</dependency>

</dependencies>

<dependencyManagement>

<dependencies>

<dependency>

<groupId>com.myorg.selenium</groupId>

<artifactId>tests_core</artifactId>

<version>0.0.1-SNAPSHOT</version>

<scope>compile</scope>

</dependency>

</dependencies>

</dependencyManagement>

</project>

 

Если все сделано правильно Eclipse подключит selenium-java-client-driver-1.0.1.jar и junit-4.4.jar

В итоге у вас получится нечто такое:

eclipse

В проекте tests_core создаем package com.myorg.selenium.navigate. В нем создаем Class LoginPage:

package com.myorg.selenium.navigate;

import com.myorg.selenium.test.SeleniumTests;

import com.thoughtworks.selenium.Selenium;

 

public class LoginPage extends SeleniumTests {

public LoginPage(Selenium selenium)

{

this.selenium = selenium;

}

}

 

В проекте tests_core создаем package com.myorg.selenium.test. В  нем создадим Class SeleniumTests:

package com.myorg.selenium.test;

import com.myorg.selenium.navigate.LoginPage;

import com.thoughtworks.selenium.DefaultSelenium;

import com.thoughtworks.selenium.Selenium;

import junit.framework.TestCase;

 

public class SeleniumTests extends TestCase {

protected Selenium selenium;

protected LoginPage lgn;

 

public void setUp() {

selenium = new DefaultSelenium(

"0.0.0.0", 4444, "*iexplore", "http://Адресс вашего приложения введите здесь");

 

selenium.start();

lgn = new LoginPage(selenium);

}

public void tearDown() throws Exception {

super.tearDown();

selenium.close();

selenium.stop();

}

}

 

Подготовительная часть закончена. Надеюсь, все прошло гладко и созданные Вами проекты не содержат ошибок.

Когда вы приобретете опыт в разработке автоматических скриптов, вы будете все меньше и меньше пользоваться автоматической записью скрипта. Пока что мы с вами только учимся и поэтому воспользуемся Selenium IDE для автоматической записи.

Для этой цели в FireFox запускаем Toolse -> Selenium IDE, предварительно стартовав Selenium server: java -jar selenium-server.jar

В Selenium идем в Options -> Format и выбираем HTML.

В поле Base Url вводим адрес нашего приложения. И нажимаем кнопку Record. После этого в FireFox загружаем приложение. Вводим имя пользователя и пароль. Нажимаем кнопку Login.

В окне Selenium IDE видим, как был записан наш скрипт.

selenium_IDE_html

Нажимаем кнопку Record еще раз для того чтобы прекратить запись.

Теперь попробуем проиграть наш скрипт.

Нажимаем Play current test case. Если все сделано правильно, то наш скрипт воспроизведется.

Вуаля! Selenium в точности повторил наши действия. Теперь переведем наш скрипт на язык Java. Options -> Format -> Java(JUnit).

selenium_IDE

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

Скопируем полученный код:

selenium.type("loginName", "a1");

selenium.type("loginPassword", "a1");

selenium.click("loginSubmit");

selenium.waitForPageToLoad("30000");

в класс LoginPage.

Теперь он будет выглядеть так (добавленный код выделен серым):

package com.myorg.selenium.navigate;

import com.myorg.selenium.test.SeleniumTests;

import com.thoughtworks.selenium.Selenium;

 

public class LoginPage extends SeleniumTests {

public LoginPage(Selenium selenium) {

this.selenium = selenium;

}

public void appLogin(String user, String pwd) throws Exception {

selenium.type("loginName", "user");

selenium.type("loginPassword", "pwd");

selenium.click("loginSubmit");

selenium.waitForPageToLoad("30000");

}

}

 

Теперь приступим к, собственно говоря, тесту. В проекте My_tests создаем package com.myorg.selenium.login. Затем создаем класс Login_tests:

package com.myorg.selenium.login;

import com.myorg.selenium.test.SeleniumTests;

 

public class Login_tests extends SeleniumTests {

public void testLogin_Positive() throws Exception {

selenium.open("http:// Адресс вашего приложения введите здесь ");

lgn.appLogin("a1", "a1");

assertTrue(selenium.isTextPresent("Welcome, a1"));

}

public void testLogin_Negative() throws Exception {

selenium.open("http:// Адресс вашего приложения введите здесь ");

lgn.appLogin("a1", "wrong");

assertTrue(selenium.isTextPresent("Login failed"));

}

 

public void testLogin_Negative2() throws Exception {

selenium.open("http:// Адресс вашего приложения введите здесь ");

lgn.appLogin("wrong", "a1");

assertTrue(selenium.isTextPresent("Login failed"));

}

}

 

 

Вот и наступает волнительный момент запуска наших тестов. В Eclipse выбираем com.myorg.selenium.login, нажимаем правую кнопку мыши и в появившемся меню выбираем Run As -> JUnit. В результате наши тесты должны выполниться и вы получите нечто похожее на картину, приведенную ниже:

results

 

Как видно первый тест провалился. Это может быть по причине того, что не работает Login, а может быть Selenium не обнаружил сообщение "Welcome, a1".

Два других теста завершились успешно.

 

Заключение.

Вот мы написали и запустили первый тест на Selenium. Теперь можно с головой окунуться в изучение Selenium, наращивать свой Framework и, конечно же делиться своими знаниями и успехами на www.sqa.by.

Проект с исходниками можно скачать в нашем файловом архиве.

 

 

Комментарии  

 
0 # антон 2009-11-24 16:56 Здравствуйте!
Спасибо за подробное описание настройки процесса.Мне кажется в классе LoginPage ошибка.
selenium.type("loginName", "user");
selenium.type("loginPassword", "pwd");
Взяв usr и pwd в кавычки вы будете вводить эти данные в каждом из трех тестов.
Убираете кавычки и вводите данные из класса Login_tests, что и было нужно.
Ответить | Ответить с цитатой | Цитировать
 
 
0 # Aliaksei Martyniuk 2009-11-25 11:52 Антон, вы совершенно правы!

Спасибо за внимательность!
Ответить | Ответить с цитатой | Цитировать
 

Добавить комментарий

Пожалуйста зарегистрируйтесь. Комментарии незарегистрированных пользователей будут публиковаться после проверки модератором.


Защитный код
Обновить