Java自动化测试Tips(Selenium )

关键点

  1. 验证元素是否存在
  2. 验证是否到达正确页面driver.getTitle();
  3. 验证页面显示的语句是否正确:warning message
  4. 验证显示的数量是否一致
  5. 验证验证元素是否激活,选框是否选中

使用的插件

  1. Maven
  2. TestNG
  3. SVN

遗留问题

  1. 下拉框无法定位点击
  2. 32 bit 与 64 bit 的区别
  3. @Test 的作用
  4. @FindBy 的作用

常见功能

  1. 断言判断元素是否存在:customAssertion.assertTrueisElementExist
customAssertion.assertTrue(isElementExist(homepage.buttonOfAddYourEquipment), "Add Your Cat Equipment button is showing");
  1. 判断属性是否被激活"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;
	}
  1. 用得比较多的就是List.size() 获取列表大小,并运用在循环方法中。
  2. 随机生产数字:当输入12,生成的是0-11的数
	public static int getRandomIntValue(int randomNumber) throws Exception {
		int randomInt = (int) (Math.random() * randomNumber);
		return randomInt;
	}
  1. 获取页面语句并输出WebElement.getText().toString().trim();
  2. A.contains(B); A中是否有B的字符串在。
  3. 还可以写从String中获取Number的方法。
  4. 将字符串数字转换为int类型 int resultTotal = Integer.valueOf(resultNumber);
  5. 建立List:`
ArrayList<Integer> priceList = new ArrayList<Integer>();
priceList.add(2);
  1. 利用JavaScript处理滚动条
driver.executeScript("arguements[0].scrollIntoView(true);", homepage.footerBlock);
  1. 步骤日志记录test.log(LogStatus.INFO, "Step:......");
  2. .getAttribute(“属性名”); 此处如果xpath是 name value = “…”,只能用value,不能用name value
  3. 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

  1. 打开对应网页driver.navigate().to(”http://www.baidu.com“);
  2. 获取titledriver.getTitle();

Coverage

Run旁边的coverage,可以测代码执行覆盖率
绿色:代码被执行过
黄色:代码部分被执行过
红色:代码没有被执行过
.

List 数据比较

  1. 将两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;
	 }
  1. List数据定义
public static final List<String> provinceList = new ArrayList<>(Arrays.asList());
  1. 调用方法
reusableFunctions.compareWebElementListToStringList(homepage.listOfShoppingProvince, AdditionalTestData.provinceList);

.

常见错误原因

  1. 加载时间不够,导致无法点击下一步组件。例如出现以下报错:WebDriverExceptionThread.sleep(500);
  2. 点击组件驱动页面跳转时,需要语句:waitForPageLoadComplete()
	public static void waitForPageLoadComplete() throws InterruptedException {
		WebDriverWait wait = new WebDriverWait(TestCaseBase.driver,
				200000);
		wait.until(isPageLoaded());
	}
  1. 当新写一条测试用例时,要注意继承TestCaseBase, 验证方法要有异常抛出
public class TC_OrderHistory extends TestCaseBase{
  	@Test
	public void verify_TC_OrderHistory() throws Exception {}
}

… . 对新创建的页面,也要有对基础页面的继承

public class HomePage extends BasicPage {
  1. 错误类型:空指针异常。可能没有继承到类java.lang.NullPointerException
  2. 当找不到错误点时,可以用输出的语句定位错误点。但是后来有了test-output,就可以根据此定位。System.out.println("1111111");
  3. xpath 定位,有时范围太大,可能定位不到,或无法点击。

猜你喜欢

转载自blog.csdn.net/Cheryl_Xu/article/details/90032156
今日推荐