webDriver实现了web应用各种元素的api,并支持js操作页面元素,比如下拉框,复选框,单选按钮等一、通过webdriver提供的api完成各种验证操作1、检查元素的属性值使用getAttribute()完成WebElement element = driver.findElement(By.id("logout"));String alignStr = element.getAttribute("align");assertEquals("right",alignStr);使用getCssValue()方法获取css属性WebElement element = driver.findElement(By.id("logout"));String width = element.getCssValue("width");assertEquals("100px",width);2、检查元素文本值,getText()方法WebElement element = driver.findElement(By.id("logout"));String alignStr = element.getText();assertEquals("退出",alignStr);通过以上方法可以完成对某个元素是否出现在dom中,帮助我们完成对测试结果的判断,但此方法不太常用,由于某个元素没有出现的话,findElement方法会直接抛出异常,后边我会在测试流控制的文章给大家介绍如何完成测试结果的判断二、如何使用程序控制鼠标和键盘以完成交互操作webdriver中提供了一个Actions类,帮助我们完成鼠标及键盘来相应事件1、使用Actions完成一组操作,代码示例:List<WebElement> table = driver.findElements(By.xpath("//table[@id,table_id]/tr"));Actions builder = new Actions(driver);builder.click(table.get(0)).keyDown(Keys.CONTROL).click(table.get(2)).keyUp(Keys.CONTROL).build().perform();从示例中可以看出,通过Actions类构建一连串的操作,依次是,单击-》按下ctr键-》单击-》放开ctrl键 ,然后build(),最后执行定义的这一组操作上边示例是用户在操作表格时,选择同时选中第一行到第三行表格数据的操作,大家可以根据场景需要,灵活变通,其实,就是不同事件的组合,另外需要注意的是,使用时要确保元素可见。2、使用Actions完成双击操作WebElement img = driver.findElement(By.id("img"));Actions builder = new Actions(driver);builder.doubleClick(img).build().perform();3、执行拖拽操作,首先需要定位源元素及目的元素,以下是完成将img1拖动到img2的操作WebElement img1 = driver.findElement(By.id("img1"));WebElement img2 = driver.findElement(By.id("img2"));Actions builder = new Actions(driver);builder.dragAndDrop(img1,img2).perform();4、调用js代码,demo_1:使用js完成关闭当前页面JavascriptExecutor js = (JavascriptExecutor)driver;jsStr = "window.close()";js.executeScript(jsStr);demo_2:使用js得到当前页面标题JavascriptExecutor js = (JavascriptExecutor)driver;jsStr = "return document.title";String title = (String)js.executeScript(jsStr);5、使用webdriver截图,代码示例:File img = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(img, new File("target/screenshot/i.jpg")); 6、常见页面控件的操作a. 下来框的操作,使用Select类操作,methods 在api中都有体现b. 对于单选按钮,复选框,selenium中没有专门的类对其操作,对这两中元素使用WebElement中的isSelected()
方法操作7、webdriver提供WindowsUtils类完成对windows的进程,注册表,系统目录的操作,详见api
8.循环中所有td里的文本
具体实现为
package com.example.tests;
import static org.junit.Assert.*;
import java.util.*;
import org.junit.*;
import org.openqa.selenium.*;
import org.openqa.selenium.ie.InternetExplorerDriver;
public class Selenium2 {
WebDriver driver = new InternetExplorerDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
@Test
public void tableTest() {
driver.get("http://www.w3school.com.cn/html/html_tables.asp");
//首先得到所有tr的集合
List<WebElement> rows = driver.findElements(By.cssSelector(".dataintable tr"));
//验证表格的行数
assertEquals(11,rows.size());
//打印出所有单元格的数据
for (WebElement row : rows) {
//得到当前tr里td的集合
List<WebElement> cols = row.findElements(By.tagName("td"));
for (WebElement col : cols) {
System.out.print(col.getText());//得到td里的文本
}
System.out.println();
}
driver.close();
}
}
打印结果为
---------------------------------------------------------------------------------
<table>定义表格
<caption>定义表格标题。
<th>定义表格的表头。
<tr>定义表格的行。
<td>定义表格单元。
<thead>定义表格的页眉。
<tbody>定义表格的主体。
<tfoot>定义表格的页脚。
<col>定义用于表格列的属性。
<colgroup>定义表格列的组。