关键点
- 验证元素是否存在
- 验证是否到达正确页面driver.getTitle();
- 验证页面显示的语句是否正确:warning message
- 验证显示的数量是否一致
- 验证验证元素是否激活,选框是否选中
使用的插件
- Maven
- TestNG
- SVN
遗留问题
- 下拉框无法定位点击
- 32 bit 与 64 bit 的区别
- @Test 的作用
- @FindBy 的作用
常见功能
- 断言判断元素是否存在:customAssertion.assertTrue 、 isElementExist
customAssertion.assertTrue(isElementExist(homepage.buttonOfAddYourEquipment), "Add Your Cat Equipment button is showing");
- 判断属性是否被激活"active"或复选框有没有没选中"checked":isAttribtuePresent
FunctionUtil.isAttribtuePresent(myorderpage.tabOfAll, "active");
static public boolean isAttribtuePresent(WebElement element,
String attribute) {
Boolean result = false;
try {
String value = element.getAttribute(attribute);
if (value != null) {
result = true;
}
} catch (Exception e) {
}
return result;
}
- 用得比较多的就是List.size() 获取列表大小,并运用在循环方法中。
- 随机生产数字:当输入12,生成的是0-11的数
public static int getRandomIntValue(int randomNumber) throws Exception {
int randomInt = (int) (Math.random() * randomNumber);
return randomInt;
}
- 获取页面语句并输出
WebElement.getText().toString().trim();
- A.contains(B); A中是否有B的字符串在。
- 还可以写从String中获取Number的方法。
- 将字符串数字转换为int类型
int resultTotal = Integer.valueOf(resultNumber);
- 建立List:`
ArrayList<Integer> priceList = new ArrayList<Integer>();
priceList.add(2);
- 利用JavaScript处理滚动条
driver.executeScript("arguements[0].scrollIntoView(true);", homepage.footerBlock);
- 步骤日志记录
test.log(LogStatus.INFO, "Step:......");
- .getAttribute(“属性名”); 此处如果xpath是 name value = “…”,只能用value,不能用name value
- placeHeader为未输入内容时的预填值
窗口句柄
在Windows中,句柄是一个系统内部数据结构的引用。例如当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口的句柄,系统会通知你:你正在操作142号窗口,就此你的应用程序就能要求系统对142号窗口进行操作——移动窗口、改变窗口大小、把窗口最小化等等。
换句话说,句柄是一种内部代码,通过它能引用受系统控制的特殊元素,如窗口、位图、图标、内存块、光标、字体、菜单等。
切换窗口 对窗口句柄的使用
String handle = driver.getWindow Handle();
for(String handle : driver.getWindowHandles()){
if(!handles.equals(handle)){
continue;}
driver.switchTo().window(handles);
break;
}
Robot Framework
一款python编写的功能自动化测试框架。可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行。主要用于轮次很多的验收测试和验收测试驱动开发(ATDD)。
关于driver
- 打开对应网页
driver.navigate().to(”http://www.baidu.com“);
- 获取title
driver.getTitle();
Coverage
Run旁边的coverage,可以测代码执行覆盖率
绿色:代码被执行过
黄色:代码部分被执行过
红色:代码没有被执行过
.
List 数据比较
- 将两list进行比较的方法
public boolean compareWebElementListToStringList(List<WebElement> elementlist, List<String> list2) {
List<String> list1 = new ArrayList<String>();
for(int i=0; i<elementlist.size(); i++) {
list1.add(elementlist.get(i).getText().trim());
}
for (int j = 0; j < list1.size(); j++) {
if (!list1.get(j).contains(list2.get(j).trim())) {
System.out.println("List1 =" + list1.get(j) + " List2 = " + list2.get(j));
return false;
}
}
return true;
}
- List数据定义
public static final List<String> provinceList = new ArrayList<>(Arrays.asList());
- 调用方法
reusableFunctions.compareWebElementListToStringList(homepage.listOfShoppingProvince, AdditionalTestData.provinceList);
.
常见错误原因
- 加载时间不够,导致无法点击下一步组件。例如出现以下报错:WebDriverException
Thread.sleep(500);
- 点击组件驱动页面跳转时,需要语句:
waitForPageLoadComplete()
public static void waitForPageLoadComplete() throws InterruptedException {
WebDriverWait wait = new WebDriverWait(TestCaseBase.driver,
200000);
wait.until(isPageLoaded());
}
- 当新写一条测试用例时,要注意继承TestCaseBase, 验证方法要有异常抛出
public class TC_OrderHistory extends TestCaseBase{
@Test
public void verify_TC_OrderHistory() throws Exception {}
}
… . 对新创建的页面,也要有对基础页面的继承
public class HomePage extends BasicPage {
- 错误类型:空指针异常。可能没有继承到类
java.lang.NullPointerException
- 当找不到错误点时,可以用输出的语句定位错误点。但是后来有了test-output,就可以根据此定位。
System.out.println("1111111");
- xpath 定位,有时范围太大,可能定位不到,或无法点击。