1 元素定位
1.1 通过id查找---driver.findElement(By.id(String str))
假设页面写成这样:
<input type="text" name="passwd"id="passwd-id" />
那么可以这样找到页面的元素:
通过id查找:
WebElement element = driver.findElement(By.id("passwd-id"));
1.2 通过name查找----driver.findElement(By.name(String str))
WebElement element = driver.findElement(By.name("passwd"));
1.3 通过className查找---driver.findElement(By.className(String str))
假设页面写成这样:
<div class="cheese"><span>Cheddar</span></div><div class="cheese"><span>Gouda</span></div>
可以通过这样查找页面元素:
List<WebElement>cheeses = driver.findElements(By.className("cheese"));
1.4 driver.findElement(By.linkText(String str))
假设页面元素写成这样:
<a href="http://www.google.com/search?q=cheese">cheese</a>
那么可以通过这样查找:
WebElement cheese =driver.findElement(By.linkText("cheese"));
1.5 driver.findElement(By.partialLinkText(String str))
假设页面元素写成这样:
<a href="http://www.google.com/search?q=cheese">cheese</a>
那么可以通过这样查找:
WebElement cheese =driver.findElement(By.partialLinkText("ese"));
1.6 通过xpath查找----driver.findElement(By.xpath(String str))
WebElement element =driver.findElement(By.xpath("//input[@id='passwd-id']"));
2 API
2.1 打开网页
driver.get(String url)
例如:
driver.get("http://www.w3school.com.cn/")
2.2 输入框
例如:
//找到输入框元素
WebElement element = driver.findElement(By.id("password"));
//在输入框中输入内容:
element.sendKeys("123456");
//将输入框清空:
element.clear();
//获取输入框的文本内容:
element.getText();
2.3 下拉框
select.selectByIndex(int num)
num---选项对应的索引值
select.selectByValue(String str)
str---选项对应的value属性值
select.selectByVisibleText(String str)
str---选项值
例如:
//找到下拉选择框的元素:
Select select = new Select(driver.findElement(By.id("select")));
//选择对应的选择项:
select.selectByVisibleText("mediaAgencyA");
//或
select.selectByValue("MA_ID_001");
//不选择对应的选择项:
select.deselectAll();
select.deselectByValue("MA_ID_001");
select.deselectByVisibleText("mediaAgencyA");
//或者获取选择项的值:
select.getAllSelectedOptions();
select.getFirstSelectedOption();
2.4 单选按钮(Radio Button)
例如:
//找到单选框元素:
WebElement bookMode =driver.findElement(By.id("BookMode"));
//选择某个单选项:
bookMode.click();
//清空某个单选项:
bookMode.clear();
//判断某个单选项是否已经被选择:
bookMode.isSelected();
2.5 多选项(checkbox)
多选项的操作和单选的差不多,例如:
WebElement checkbox =driver.findElement(By.id("myCheckbox"));
checkbox.click();
checkbox.clear();
checkbox.isSelected();
checkbox.isEnabled();
2.6 按钮(button)
例如:
//找到按钮元素
WebElement saveButton = driver.findElement(By.id("save"));
//点击按钮
saveButton.click();
//判断按钮是否enable
saveButton.isEnabled ();
2.7 driver.navigate().back()
作用是模拟单击浏览器的后退按钮。
driver.navigate().forword()
2.8 driver.navigate(). refresh()
作用是刷新当前页面。
2.9 driver.close()
该方法的作用是模拟用户单击浏览器窗口上或者标签的关闭按钮。
driver.quit()---退出driver,并关闭所有相关的窗口
2.10 driver.manage().timeouts().implicitlyWait(long time, TimeUnit unit);
作用:因为Load页面需要一段时间,如果页面还没加载完就查找元素,必然是查找不到的。最好的方式,就是设置一个默认等待时间,在查找页面元素的时候如果找不到就等待一段时间再找,直到超时。
参数:
time---等待时间
unit ---时间单位
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
2.11 element.submit()
方法作用:提交一个指定的表单,适用于没有提交按钮的表单。
参数:
无
2.12浏览器多窗口处理
在进行Web测试时,还会弹出一些子窗口,并且在多个窗口之间进行切换操作。
当进行了某个操作,将会有新窗口弹出时,如果要到新开的页面上进行操作,需要切换到新窗口。
//Switch to new window opened
for(String winHandle : driver.getWindowHandles()){
System. out.println( "+++" + winHandle);
driver.switchTo().window(winHandle);
}
2.13 Frames之间的切换
有时候,切换前最好先执行:
driver.switchTo().defaultContent();
切换(第一次)到某个frame:
driver.switchTo().frame(leftFrame);
从一个frame切换(第二次)到另一个frame:
driver.switchTo().defaultContent();
driver.switchTo().frame(mainFrame);
比如,在富文本框里输入文本,然后提交
//根据iframe id
driver.switchTo().frame( "ueditor_0");
//抓取元素类
driver.findElement(By. xpath("//body[@class='view']")).sendKeys( "测试前台反馈输入 test input" );
//切换到默认的frame
driver.switchTo().defaultContent();
driver.findElement(By. xpath("//input[@value='提交']")).click();
2.14 操作对话框
Alert alert = driver.switchTo().alert();
alert.accept() --- 确定
alert.dismiss() --- 取消
alert.getText() --- 提示信息
2.15 上传文件
WebElement adFileUpload = driver.findElement(By.id("WAP-upload"));
String filePath = "C:\\test\\uploadfile\\media_ads\\test.jpg";
adFileUpload.sendKeys(filePath);
或者
setClipboardData("E:\\autotest\\huawei.jpg");
driver.findElement(By.name("goods_img")).click();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//
uploadFile(robot);
//该方法用来设置剪贴板上的数据
public void setClipboardData(String string) {
StringSelection stringSelection = new StringSelection(string);
Toolkit.getDefaultToolkit().getSystemClipboard()
.setContents(stringSelection, null);
}
//该方法用来上传附件
public void uploadFile(Robot robot) {
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
}
2.16 结果验证
例如:
assertEquals(driver.getCurrentUrl(),"http://localhost:90/upload/flow.php?step=cart");
assertEquals(driver.getTitle(),"报销单详情 - 费用管理 ");
assertEquals(driver.findElement(By.xpath("//*[@id='ECS_MEMBERZONE']/font/font")).getText(),"admin");
网友评论