PatatiumWebUi
Введение
Это фреймворк для автоматизации тестирования WebUI, созданный основателем веб-сообщества webdriver на китайском языке, по прозвищу «Картофель». Фреймворк PatatiumWebUI написан на языке Java и основан на открытом исходном коде Selenium WebDriver. Он объединяет в себе инструменты TestNG, Selenium, WebDriver, JXL, Jodd-HTTP и другие.
Фреймворк основан на архитектуре объектной модели страницы (POM) и реализует ключевые технологии:
Благодаря этому можно писать сценарии без глубоких знаний программирования, а также разделять данные и код. Это позволяет изменять расположение элементов на странице без необходимости изменения сценария, достаточно лишь изменить соответствующую информацию о расположении элемента.
Во фреймворке реализованы функции проверки точек и сбоя тестовых случаев, автоматического создания снимков экрана при сбое, автоматического формирования HTML-отчёта о тестировании и автоматической отправки отчёта по электронной почте.
На данный момент фреймворк не является полностью завершённым и требует дальнейшей разработки сценариев автоматизации. Для изучения фреймворка необходимо иметь базовые знания HTML и Java. В будущем можно рассмотреть возможность реализации автоматического кодирования.
Конфигурация среды
Примечание
При создании проекта необходимо установить кодировку UTF-8, иначе могут возникнуть проблемы с отображением китайских символов.
API-документ
Для просмотра API-документа нажмите здесь.
Реализованные функции
Демонстрация
1. Создание файла библиотеки объектов (имя файла — UILibrary.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!--整个对象库文件的根目录,管理整个项目的对象-->
<map>
<!--管理一个页面的元素(webelement:input,select,textare,a,li等标签),一个page包含多个locator对象
Pagename:page对象名字,格式:org.webdriver.patatiumwebui.PageObject.xxxPage;最后面那位才是真正的页面名字,前面的是java对象库路径;另外注意,页面名字是头个单词大写;例如主页:名字定义为 org.webdriver.patatiumwebui.HomePage
Value:页面对象的URL,可不填。
Desc:页面对象中文描述-->
<page pagename="org.webdriver.patatiumwebui.pageObject.LoginPage" value="" desc="京东登录页面">
<!--管理一个页面的元素(webelement:input,select,textare,a,li等标签),一个page包含多个locator对象
Type:定位方式,包含id,name,class,linktext,xpath,css等,定位元素的时候灵活使用,一般可以统一用xpath
代替id,name,class,linktext的定位方式。
Timeout:元素加载时间,有些页面元素,可能要等待一段时间才能加载过来,为了查找元素的稳定性,需加等待时间。
Value:元素定位信息,如果是id,name,class,linktext直接把网页元素对应的这些属性值写上即可,如果是xpath定位方式,
需要填写正确的xpath语法格式。
Desc:元素的描述,元素的中文描述信息-->
<locator type="xpath" timeout="3" value="//input[@id='loginname']" desc="用户名">用户名输入框</locator>
<locator type="id" timeout="3" value="nloginpwd" desc="密码">密码输入框</locator>
<locator type="id" timeout="3" value="loginsubmit" desc="登录">登录按钮</locator>
</page>
</map>
После создания файла библиотеки объектов запустите файл /src/main/java/org/webdriver/patatiumwebui/PageObjectConfig/PageObjectAutoCode.java для генерации кода библиотеки объектов.
2. Пример упаковки общих действий (бизнес-операций)
package org.webdriver.patatiumwebui.action;
import org.webdriver.patatiumwebui.pageObject.LoginPage;
import org.webdriver.patatiumwebui.utils.ElementAction;
import org.webdriver.patatiumwebui.utils.TestBaseCase;
import java.io.IOException;
/**
* Created by zhengshuheng on 2016/8/29 0029.
*/
public class LoginAction extends TestBaseCase{
public LoginAction(String Url,String UserName,String PassWord) throws IOException
{
//此driver变量继承自TestBase变量
LoginPage loginPage=new LoginPage();
loginPage.open(Url);
System.out.println(driver.getCurrentUrl());
ElementAction action=new ElementAction();
action.clear(loginPage.密码输入框());
action.type(loginPage.用户名输入框(),UserName);
action.clear(loginPage.密码输入框());
action.type(loginPage.密码输入框(),PassWord);
action.click(loginPage.登录按钮());
}
}
Код общих действий размещается в пакете src/main/java/org/webdriver/patatiumwebui/Action.
3. Пример источника данных привода
Создайте файл loginData.xls в папке src/main/resources/data и заполните его следующим образом:
4. Пример написания тестовых примеров
Обычный тестовый пример:
@Test(description="登录成功测试")
@Parameters({"BaseUrl"})//读取testng.xml参数
public void login(String BaseUrl) throws IOException
{
//调用登录方法,需输入正确的用户名和密码
LoginAction loginAction=new LoginAction(BaseUrl+"/new/login.aspx","11111","abc123");
action.sleep(2);
//设置检查点
Assertion.VerityTextPresentPrecision("jd_1111","输入正确的用户名和密码,验证是否成功进入主页");
//设置用例断言,判断用例是否失败
Assertion.VerityError();
}
Пример теста с данными:
//数据驱动案例--start
@DataProvider(name="longinData")
public Object[][] loginData()
{
//读取登录用例测试数据
String filePath="src/main/resources/data/loginData.xls";
//读取第一个sheet,第2行到第5行-第2到第4列之间的数据
return ExcelReadUtil.case_data_excel(0, 1, 4, 1, 3,filePath);
}
``` ```
@Test(description="登录失败用例",dataProvider = "longinData")
public void loginFail (String userName,String password,String message) throws IOException, DocumentException {
//代替testng参数化的方法
String BaseUrl= XmlReadUtil.getTestngParametersValue("testng.xml","BaseUrl");
//调用登录方法
LoginAction loginAction=new LoginAction(BaseUrl+"/new/login.aspx",userName,password);
action.sleep(1);
//设置检查点
Assertion.VerityTextPresent(message,"验证是否出现预期的错误提示信息:"+message);
//设置断言
Assertion.VerityError();
}
Это похоже на язык Java.
Примечание: в запросе есть код, который не удалось перевести из-за отсутствия контекста. Перевод текста с английского на русский язык:
IDE: в интегрированной среде разработки (IDE) используйте TestNG для запуска testng.xml. Maven: выполните команды mvn clean и mvn test. Jenkins:
После выполнения тестов автоматически отправляется электронное письмо с отчётом и создаётся файл отчёта в каталоге test-out корневого каталога проекта. Отчёт выглядит следующим образом:
Электронное письмо выглядит следующим образом:
Журнал выглядит следующим образом:
Примечание: вы можете использовать плагин Firebug или Firepath в браузере Firefox для проверки правильности xpath.
Сначала рассмотрим пример xpath: //div[@id='abc']/form/div/input/span. //: выбирает элементы из текущего узла, не учитывая его конкретное местоположение, например: //div[@name='abc']. Этот xpath находит div с атрибутом name, равным abc. / выбирает элемент из корневого узла, например: /html/body/div[@id='myModalex']. Можно выбрать элемент, начиная с корневого узла или с любого другого узла. Например: //*[@id='loginForm']/div[1]/label. @ обозначает атрибут. Атрибуты можно использовать с операторами and и or. Пример: //label[@class='col-sm-2 control-label' and @for='userName'] В этом примере, если одного атрибута недостаточно для определения элемента, можно добавить ещё один атрибут, чтобы сделать определение уникальным. Text(): поиск элемента по текстовому значению, например: //h2[text()='webdriver中文社区']. Contains();//input[contains(@id,'nt')] — поиск по частичному совпадению, поиск input с id, содержащим nt. //h2[contains(text(),'webdriver中文社区')] — поиск элементов с текстом, содержащим «webdriver中文社区». Гибкий пример использования: Поиск элемента:
<span class=”cde”>八佰伴</span>
<span class=”cde”>嘎嘎嘎</span>
<div id=”abc”>
<form>
<div>
<input>
<span class=”cde”>八佰伴</span>
</input>
</div>
</form>
<div>
Анализ: у этого элемента нет уникальных идентификаторов, имён и других атрибутов, а также нет уникальных элементов на более высоких уровнях. Можно ли оптимизировать и упростить xpath? Да, используя //, можно значительно упростить и оптимизировать выражение xpath. Вариант 1: //div[@id=’abc’]/form/div/input/span Вариант 2: //*[@id=’abc’]/form/div/input/span[@class=’cde’] Вариант 3: //span[@class=’cde’][2] Вариант 4: //div[@id=’abc’]//span[@class=’cde’]. Этот метод наиболее лаконичен, структура также наиболее ясна и стабильна.
Таким образом, при использовании xpath для поиска элементов следует отдавать предпочтение атрибутам id и name. Если эти атрибуты не позволяют однозначно определить элемент, следует искать на более высоком уровне, используя родительские, прародительские и другие узлы. Если одного атрибута недостаточно, можно объединить несколько атрибутов с помощью оператора and, чтобы однозначно определить элемент.
Пример: Для поиска поля ввода имени пользователя можно использовать //*[@id='userName'], что означает поиск всех элементов с атрибутом id, равным 'userName', на текущей странице. * обозначает все элементы.
GPL V2.0
Изображение: http://git.oschina.net/uploads/images/2016/0829/144253_111773ec_482055.jpeg
Если вам нравится этот проект, присоединяйтесь к группе обмена WebDriver китайского сообщества в QQ: 471137382. Я буду рад получить ваши предложения и сообщения об ошибках. Или напишите мне на почту: 609958331@qq.com Теперь пожертвования через WeChat не могут быть связаны с именем жертвователя, поэтому я буду рад, если вы добавите меня в WeChat: zhengshuheng002.
Имя | Сумма | Способ | Описание |
---|---|---|---|
Месяц Бо | 8,8 | Платёж | Ален, надеюсь, ты будешь писать больше статей об автоматизации тестирования в свободное время |
Джефф | 66,66 | Поддержка! Отличный пример! | |
Боби | 18,80 | Продолжай, твоя структура неплоха | |
Джойс | 10,24 | Поддерживаю тебя |
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарий ( 0 )