Одним из интересных аспектов Selenium является то, что вы можете не только записывать себя с помощью сайта, но и запускать его как тестовый пакет.
Во-первых, я установлю Selenium в Firefox (так как это официальная версия) и запишу быстрый тест. Важно отметить, что Selenium даст вам несколько разных способов запомнить, какой HTML-тег вы использовали. Например, он может просто вызвать определенный идентификатор на странице.
Однако при использовании системы портала, такой как скажем JSF, под Liferay, значения идентификаторов генерируются на лету, поэтому вы запишете один тест, и больше никогда не сможете его успешно запустить.
Одна очень приятная особенность Selenium — вы можете вызывать HTML xpath, поэтому в примере с Liferay ваш код все равно найдет тег, по которому нужно щелкнуть. Допустим, я записываю себя, войдя в страницу ниже …
Теперь, когда эта страница генерируется с помощью liferay, я вижу, что идентификатор входного текста для формы:
1
2
3
|
< input aria-required = "true" class="aui-field-input aui-field-input-text aui-form-validator-error" id = "_58_login" name = "_58_login" type = "text" value = "" /> |
Поскольку JSF под Liferay будет регулярно создавать новый идентификатор для этого текстового поля (я полагаю, что при каждом перезапуске сервера, хотя это может происходить даже чаще), это означает, что мы не можем просто получить идентификатор и подключиться к нему, так как тесты будут выполняться только один раз.
Однако мы можем подключиться к liferay, напрямую используя тег html, так как он не будет меняться каждый раз, когда Liferay загружает JSF. Я заметил, что должен был использовать эту же технику для каждой страницы в Liferay, так как идентификатор почти для всех html, отображаемых через JSF, имел разные идентификаторы при каждом доступе к странице.
Затем мы можем экспортировать это в класс junit из меню File File | Экспортировать тестовый набор как… | Java / JUnit 4 / Web Driver, который дал бы нам следующий класс для запуска и тестирования.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
import static org.junit.Assert.fail; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class TestExample { private WebDriver driver; private String baseUrl; private StringBuffer verificationErrors = new StringBuffer(); @Before public void setUp() throws Exception { driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait( 30 , TimeUnit.SECONDS); } @Test public void testExample() throws Exception { driver.get(baseUrl + "/en_GB/web/myapp/home?p_p_id=58&p_p_lifecycle=0&p_p_state=maximized&p_p_mode=view&saveLastPath=0&_58_struts_action=%2Flogin%2Flogin" ); driver.findElement(By.xpath( "//span/input" )).clear(); driver.findElement(By.xpath( "//span/input" )).sendKeys( "user" ); driver.findElement(By.xpath( "//span[2]/span/span/input" )).clear(); driver.findElement(By.xpath( "//span[2]/span/span/input" )).sendKeys( "pass" ); driver.findElement(By.xpath( "//div/span/span/input" )).click(); } @After public void tearDown() throws Exception { driver.quit(); String verificationErrorString = verificationErrors.toString(); if (! "" .equals(verificationErrorString)) { fail(verificationErrorString); } } } |