Операция
Selenium RC (Java): Основные операции в действии. Часть 1
Опубликовано KaNoN в 20.08.2010В стандартной документации к селениуму достаточно много примеров тестов, но они в основном направлены на то, чтобы показать структуру тестов, а также некоторый частный случай использования тех или иных операций. При этом мало внимания уделяется обзору имеющихся команд. И это в принципе неудивительно, так как по сути мы используем один клиентский класс, у которого определены все необходимые нам методы. И уже в зависимости от конкретной задачи мы просто ищем нужный метод, который бы эту задачу выполнил. Тем не менее, мелких деталей всегда хватает и на их разбор может уйти много времени, что может вызвать множество проблем, особенно для начинающих. Поэтому, целью данного поста является ознакомление с основными операциями селениума, с которыми так иил иначе придется иметь дело, а также описание возможных нюансов, которые могут возникнуть.
Мы будем рассматривать работу селениума на примере Java клиента, но все подходы и заморочки аналогичны для других языков. Также, изначально предполагается, что селениум-сервер и клиентские библиотеки уже установлены и настроены нужным образом, так что на эти вещи мы не будем отвлекаться. Если у вас с этим есть проблемы, то для начала вам сюда. Также желательно быть знакомым с Java, хотя бы на базовом уровне, так как данный пост не предназначен для введения в Java.
В качестве основы теста мы возьмем пример отсюда, оставим каркас и наполним конструкциями для нашего теста. Об этом чуть позже.
Для нашего примера нужно создать тестовый HTML файл, в котором будут основные элементы, с которыми мы будем работать. Создадим файл index.htm и поместим его в корневой каталог диска C: . Если вы хотите поместить этот файл в другой каталог, то вам надо будет просто поменять абсолютный путь к файлу и учитывать это вдальнейшем при рассмотрении данного примера.
Итак, поместим в наш HTML-файл содержимое вида:
<html>
<body>
<form name="sample_form">
<table>
<tr><td width="100%"><fieldset><legend>Text fields</legend>
<table>
<tr>
<td><label for="text_field">Simple text field:</td>
<td><input type=text id="text_field" value="" /></td>
</tr>
<tr>
<td valign=top><label for="text_area">Text Area:</td>
<td><textarea id="text_area" name="text_area" cols=30 rows=5></textarea></td>
</tr>
</table>
</fieldset></td></tr>
<tr><td width="100%"><fieldset><legend>Radio buttons/Check boxes</legend>
<table>
<tr>
<td><label for="radio_1">Item 1:</td>
<td><input type=radio id="radio_1" name="radio_btn" checked /></td>
</tr>
<tr>
<td><label for="radio_2">Item 2:</td>
<td><input type=radio id="radio_2" name="radio_btn"/></td>
</tr>
<tr>
<td valign=top><label for="check_box">Check box:</td>
<td><input type=checkbox name="check_box" /></td>
</tr>
<tr>
<td valign=top><label for="ev_check_box">Check box with event:</td>
<td><input type=checkbox name="ev_check_box" onclick="deactivated_btn.disabled=!this.checked;"/></td>
</tr>
</table>
</fieldset></td></tr>
<tr><td width="100%"><fieldset><legend>Buttons</legend>
<table>
<tr>
<td><b><div id="clicked_text"></div></b></td>
</tr>
<tr>
<td>
<input type=button id="deactivated_btn" value="Deactivated" onclick="clicked_text.innerHTML=deactivated_btn.value;"/>
<input type=button id="btn_1" value="First" onclick="clicked_text.innerHTML=btn_1.value;"/>
<button id="btn_2" onclick="clicked_text.innerHTML=btn_2.innerHTML;return false;">Second</button>
</td>
</tr>
</table>
</fieldset></td></tr>
<tr><td width="100%"><fieldset><legend>Lists</legend>
<table>
<tr>
<td><label for="single_list">Single selection list:</td>
<td>
<select id="single_list" />
<option selected>Option 1</option>
<option>Option 2</option>
<option>Option 3</option>
</select>
</td>
</tr>
<tr>
<td valign=top><label for="multi_list">Multi selection list:</td>
<td>
<select id="multi_list" MULTIPLE>
<option>Multi Option 1</option>
<option>Multi Option 2</option>
<option>Multi Option 3</option>
</select>
</td>
</tr>
</table>
</fieldset></td></tr>
<tr width="100%"><td width="100%"><fieldset><legend>File input</legend>
<table>
<tr>
<td valign=top><label for="file_input">File upload:</td>
<td><input type=file name="file_field" /></td>
</tr>
</table>
</fieldset></td></tr>
<tr><td><fieldset><legend>Dialog boxes</legend>
<table>
<tr>
<td>
<input type=button id="alert_btn" value="Call Alert"onclick="alert('This is Alert');"/>
<input type=button id="conf_btn" value="Call Confirmation" onclick="confirm('This is confirmation');"/>
<input type=button id="prompt_btn" value="Call Prompt" onclick="prompt('Enter prompt text')"/></td>
</tr>
</table>
</fieldset></td></tr>
</table>
</form>
</body>
</html>Достаточно просто скопировать данный текст и вставить его в нужный HTML-файл.
Осталось только создать тестовый класс, в котором мы будем добавлять код. Создайте пакет com.example.tests и создайте в нем класс NewTest, который наследуется от SeleneseTestCase класса. После этого каркас теста имеет вид:
package com.example.tests;
// We specify the package of our tests
import com.thoughtworks.selenium.*;
// This is the driver's import. You'll use this for instantiating a
// browser and making it do what you need.
import java.util.regex.Pattern;
// Selenium-IDE add the Pattern module because it's sometimes used for
// regex validations. You can remove the module if it's not used in your
// script.
public class NewTest extends SeleneseTestCase {
// We create our Selenium test case
public void setUp() throws Exception {
setUp("c:\\index.htm", "*firefox");
// We instantiate and start the browser
}
public void testNew() throws Exception {
selenium.open("c:\\index.htm");
}
}Этот каркас взят из примеров в документации к селениуму. Просто были сделаны небольшие корректировки. Итак, приступаем.








