API实例详解
一、访问网页地址:get(url)
Java代码
String url="http://www.baidu.com"; driver.get(url);
二、刷新当前网页:navigate().refresh()
java代码
String url="http://www.baidu.com";
driver.get(url);
driver.findElement(By.id("kw")).sendKeys("123123123");
Thread.sleep(2000);
//刷新浏览器当前网页
driver.navigate().refresh();
三、获取页面title属性:getTitle()
java代码
String url="http://www.baidu.com";
driver.get(url);
//获取页面的title属性
String title=driver.getTitle();
System.out.println(title);
//断言页面上的title值是不是 百度一下,你就知道
Assert.assertEquals("百度一下,你就知道",title);
四、获取页面源代码:getPageSource()
java代码
String url="http://www.baidu.com";
driver.get(url);
//获取页面源代码
String pagesource=driver.getPageSource();
System.out.println(pagesource);
//断言源代码中是否包含“百度一下,你就知道”
Assert.assertTrue(pagesource.contains("百度一下,你就知道"));
五、获取当前页面的URL地址:getCurrentUrl()
Java代码
String url="http://www.baidu.com/";
driver.get(url);
//获取URL地址
String getUrl=driver.getCurrentUrl();
//断言
Assert.assertEquals("https://www.baidu.com/", getUrl);
六、清空文本框:clear()
java代码
WebElement baiduKw=driver.findElement(By.id("kw"));
baiduKw.sendkeys("selenium");
baiduKw.clear();
七、文本框输入文本:sendkeys()
java代码
WebElement baiduKw=driver.findElement(By.id("kw"));
baiduKw.sendKeys("selenium");
八、单击元素:click()
java代码
WebElement baiduKW=driver.findElement(By.cssSelector("#su"));
baiduKW.click();
九、双击元素
HTML源码
<input id='inputBox' type="button" style="width:100px;height:50px;" ondblclick="javascript:this.style.background='red'">请双击按钮</>
Java代码
WebElement inputB=driver.findElement(By.xpath("//input[@id='inputBox']"));
//声明Action对象
Actions ac=new Actions(driver);
//使用doubleClick方法在定位的元素中进行鼠标的双击操作
ac.doubleClick(inputB).build().perform();
十、获取文本:getText()
java代码
//定位百度首页右上角的 新闻
WebElement XW=driver.findElement(By.xpath("//*[@name='tj_trnews']"));
//获取文本
String Text1=XW.getText();
//校验文本内容
Assert.assertEquals(Text1,"新闻");
十一、判断元素是否展示:isDisplayed()
java代码
WebElement baiduSu=driver.findElement(By.xpath("//*[@id='su']"));
//获取 百度一下 按钮是否显示
boolean Su=baiduSu.isDisplayed();
//校验结果
Assert.assertTrue(Su);
十二、判断元素是否激活:isEnabled()
HTML源码:
<td>Button按钮</td>
<td class="SubButton">
<div id='button'>
<input name="buttonSub" type='button' class='button' value='Submit' disabled="disabled"/>
</div>
</td>
Java代码:
//定位元素,判断是否激活
boolean submit=driver.findElement(By.xpath("//*[@name='buttonhtml']")).isEnabled();
//校验结果
Assert.assertTrue(submit);
十三、判断选择框是否被选中:isSelected()
HTML源码:
<td>RadioBox单选框</td> <td class="widgetStyle"> <div id='radio'> <input type='radio' name="identity" class='a'/><label>a</label></br> <input type='radio' name="identity" class='b'/><label>b</label></br> <input type='radio' name="identity" class='c'/><label>c</label></br> <input type='radio' name="identity" class='d'/><label>d</label> </div> </td>
java代码:
//定位a单选框
WebElement a=driver.findElement(By.xpath("//*[@id='radio']/input[1]"));
//点击单选框
a.click();
//获取单选框是否被选中
boolean b1=a.isSelected();
//校验结果
Assert.assertTrue(b1);
十四、select下拉框处理
1. selectByIndex() 根据索引来选取,从0开始
2. selectByValue() 根据属性value的属性值来选取
3. selectByVisibleText()根据标签之间的Text值,也就是页面显示的
注意:导入的包要正确不然会报错。 import org.openqa.selenium.support.ui.Select;
单选下拉列表:
HTML源码
<tr>
<td>Select下拉列表</td>
<div id='select'>
<select id="selected">
<option value ="a">huawei</option>
<option value ="b">oppo</option>
<option value="c">vivo</option>
<option value="d">xiaomi</option>
<option value="e">hongmi</option>
<option value="f">meizu</option>
</select>
</div>
</tr>
Java代码
package cn.WebDriverAPI;
//单选下拉框
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;
public class downList {
public WebDriver driver;
@Test
public void test(){
System.setProperty("webdriver.chrome.driver", "E://chromedriver.exe");
driver=new ChromeDriver();
driver.get("file:///C:/Users/Administrator.USER-20180602NR/Desktop/selenium.html");
WebElement s=driver.findElement(By.xpath("//select[@id='selected']"));
Select select=new Select(s);
//isMultiple表示此下拉框列表是否允许多选,返回结果应为false
Assert.assertFalse(select.isMultiple());
//输出isMultiple方法返回的值
Boolean b=select.isMultiple();
System.out.println("b:"+b);
//通过选项的文字进行选中
select.selectByVisibleText("oppo");
//获取当前被选中的下拉列表选项文本并赋给text1
String text1=select.getFirstSelectedOption().getText();
//断言
Assert.assertEquals("oppo", text1);
System.out.println("文本"+text1);
//使用下拉列表选项的value属性值进行选中操作
select.selectByValue("c");
//获取当前被选中的下拉列表选项文本并赋给text2
String text2=select.getFirstSelectedOption().getText();
//断言
Assert.assertEquals("vivo",text2);
//通过索引选择,从0开始
select.selectByIndex(3);
String text3=select.getFirstSelectedOption().getText();
Assert.assertEquals("xiaomi",text3);
}
@AfterMethod
public void afterMethod(){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
driver.quit();
}
}
十五、多选的下拉列表:
HTML源码
<select id="selects" multiple="multiple">
<option value="java">java</option>
<option value="c">c</option>
<option value="c++">c++</option>
<option value="VB">VB</option>
<option value="php">php</option>
<option value="python">python</option>
<option value="ruby">ruby</option>
</select>
java代码
WebElement mus=driver.findElement(By.id("selects"));
Select select=new Select(mus);
//断言下拉列表是否支持多选,支持多选isMultiple方法则返回True
Assert.assertTrue(select.isMultiple());
//通过索引选择
select.selectByIndex(0);
//获取当前被选中选项的文字
String text=select.getFirstSelectedOption().getText();
//断言获取到的文字是否符合实际
Assert.assertEquals("java",text);
//通过value值选择
select.selectByValue("c");
//通过选项文字选择
select.selectByVisibleText("VB");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//取消所有选项的选中状态
select.deselectAll();
十六、操作radio单选框
HTML源码
<div id='radio'>
<input type='radio' name="fruit" class='yi'/><label>yi</label></br>
<input type='radio' name="fruit" class='er'/><label>er</label></br>
<input type='radio' name="fruit" class='san'/><label>san</label></br>
<input type='radio' name="fruit" class='si'/><label>si</label></br>
<input type='radio' name="fruit" class='wu'/><label>wu</label>
</div>
java代码
//查找class属性为yi的按钮
WebElement yi=driver.findElement(By.className("yi"));
//判断此按钮是否为选中状态,如果不是则调用click方法进行点击
if(!yi.isSelected())
yi.click();
//断言class属性值为yi的按钮处于被选中状态。此时isSelected方法返回值应为True
Assert.assertTrue(yi.isSelected());
//输出isSelected方法返回值
Boolean b=yi.isSelected();
System.out.println("b:"+b);
十七、操作CheckBox复选框
HTML源码
<div id='checkboxs'>
<input type="checkbox" name="checkbox2"/><label>liu</label></br>
<input type="checkbox" name="checkbox3"/><label>qi</label></br>
<input type="checkbox" name="checkbox4"/><label>ba</label></br>
<input type="checkbox" name="checkbox5"/><label>jiu</label></br>
<input type="checkbox" name="checkbox6"/><label>shi</label>
</div>
java代码
//查找name值为checkbox2的复选框
WebElement liu=driver.findElement(By.xpath("//input[@name='checkbox2']"));
//判断如果此复选框还未被选中,则调用click方法单击选中
if(!liu.isSelected())
liu.click();
//断言此复选框被成功选中
Assert.assertTrue(liu.isSelected());
//停2秒看效果
Thread.sleep(2000);
//判断如果此复选框处于被选中状态则再次调用click方法进行单击取消复选框的选中状态
if(liu.isSelected())
liu.click();
//断言此复选框处于非选中状态
Assert.assertFalse(liu.isSelected());
Thread.sleep(2000);
//再次选中name值为checkbox2的复选框
liu.click();
Thread.sleep(2000);
//查找所有type属性值为 checkBox的复选框,并存在list容器内
List<WebElement> checkboxs= driver.findElements(By.xpath("//input[@type='checkbox']"));
//遍历容器中所有元素,判断每个复选框处于非选中状态,非选中状态的则调用click方法单击
//因为name值为checkbox2的复选框在上一步时已被选中所有在for循环中不会再被点击
for(WebElement checkbox:checkboxs){
System.out.println(checkbox.isSelected());
Thread.sleep(1000);
if(!checkbox.isSelected())
checkbox.click();
}
十八、检查页面元素文本是否符合预期
Java代码
driver.get("http://www.baidu.com");
//获取网页title文字
String text=driver.getTitle();
Assert.assertEquals("百度一下,你就知道",text);
//判断title文字内容是否包含 百度一下
Assert.assertTrue(text.contains("百度一下"));
//判断title文字内容开始文字是不是 百度
Assert.assertTrue(text.startsWith("百度"));
//判断title文字内容的末尾文字是不是 知道
Assert.assertTrue(text.endsWith("知道"));
十九、判断页面元素是否存在
Java代码
package cn.WebDriverAPI;
//判断页面元素是否存在
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;
import junit.framework.Assert;
public class ElementPresent {
WebDriver driver;
//写一个判断页面元素是否存在的方法 IsElementPresent
private boolean IsElementPresent(By by){
try{
//如果使用传入的参数by能找到页面元素,则函数返回true,表示成功地找到页面元素
driver.findElement(by);
return true;
}catch(NoSuchElementException e){
//如果使用传入的参数by 没有找到页面元素,返回false
return false;
}
}
@Test
public void test(){
System.setProperty("webdriver.chrome.driver","E://chromedriver.exe");
driver=new ChromeDriver();
driver.get("http://www.baidu.com");
//调用写的IsElementPresent方法查找元素
if(IsElementPresent(By.xpath("//input[@name='wd']"))==true){
//如果成功定位到页面元素,则把页面元素对象存储到element变量中
WebElement element=driver.findElement(By.xpath("//input[@name='wd']"));
//判断element变量对象是否处于可能状态。如果可用则输入“selenium”关键字
if(element.isEnabled()==true){
element.sendKeys("selenium");
}
}else{
//如果页面元素没找到,则将此用例设置为失败,并打印原因
Assert.fail("页面元素没找到");
}
}
@AfterMethod
public void aftermethod() throws InterruptedException{
Thread.sleep(2000);
driver.quit();
}
}
二十、通过句柄来识别和操作新弹出的浏览器窗口
HTML源码
<html>
<head>
<title>Selenium</title>
</head>
<body>
<td>Input输入框</td>
<div id='ifra' >
<input type="text" id="input" name='ips'/>
</div>
</br>
<div id='open'>
<a href="http://www.baidu.com" class='open' target='bank'>Open new window打开百度</a><br>
</div>
<br>
</body>
</html>
java代码
//定位点击元素,打开新的窗口
driver.findElement(By.className("open")).click();
//获取当前页面句柄
String handle=driver.getWindowHandle();
//获取所有页面句柄,并循环判断不是当前的句柄就做选取switchTo()
for(String handles:driver.getWindowHandles()){
if(handles.equals(handle))
continue;//跳过本次循环,不执行下面的命令直接进行下一次循环
//break; //结束全部for循环
driver.switchTo().window(handles);
}
//在新打开的页面中进行操作
driver.findElement(By.id("input")).sendKeys("新页面");
//关闭新页面
driver.close();
//选择原来的句柄,切到原来的界面
driver.switchTo().window(handle);
//在原来的界面进行操作
driver.findElement(By.id("input")).sendKeys("旧页面");
二十一、使用Title属性识别和操作新淡出的浏览器窗口
HTML源码
<html>
<head>
<title>SeleniumElement</title>
</head>
<body>
<td>Input输入框</td>
<div id='ifra' >
<input type="text" id="input" name='ips'/>
</div>
</br>
<div id='open'>
<a href="http://www.baidu.com" class='open' target='bank'>Open new window打开百度</a><br>
</div>
<br>
</body>
</html>
Java代码
//定位点击连接元素,打开新窗口
driver.findElement(By.xpath("//a[text()='Open new window打开百度']")).click();
//获取当前页面句柄
String handle=driver.getWindowHandle();
//获取所有页面句柄
Set<String> allHandle=driver.getWindowHandles();
//如果容器存储的对象不为空,则遍历allHandle中所有句柄
if(!allHandle.isEmpty()){
for(String windowhandle:allHandle){
try{
//调用driver.switchTo().window(windowhandle).getTitle()方法
//获取浏览器的Title属性,并判断是否是“百度一下,你就知道”
if(driver.switchTo().window(windowhandle).getTitle().equals("百度一下,你就知道"))
//判断正确则说明是百度首页,则在输入框中输入 javaselenium
driver.findElement(By.xpath("//input[@id='kw']")).sendKeys("javaselenium");
}catch(NoSuchWindowException e){
//如果没有,抛出NoSuchWindowException,打印异常的堆栈信息
e.printStackTrace();
}
}
}
//返回最开始打开的浏览器页面
driver.switchTo().window(handle);
//断言浏览器页面的Title属性值是否是 SeleniumElement
Assert.assertEquals(driver.getTitle(),"SeleniumElement");
driver.findElement(By.xpath("//input[@id='input']")).sendKeys("123456");
二十二、使用页面文字内容识别和处理新弹出的浏览器窗口
HTML源码(同二十一)
java代码
//打开新窗口 百度页面
driver.findElement(By.xpath("//a[text()='Open new window打开百度']")).click();
//获取当前页面的句柄
String OldHandle=driver.getWindowHandle();
//获取所有句柄
Set<String> AllHandle=driver.getWindowHandles();
//判断如果AllHandle不为空则进行遍历AllHandle
if(!AllHandle.isEmpty()){
try{
for(String Handle:AllHandle){
//调用driver.switchTo().window(Handle).getPageSource().contains()方法
//逐个获取页面的源码,判断是否包含“百度一下,你就知道”
if(driver.switchTo().window(Handle).getPageSource().contains("百度一下,你就知道"))
//如果判断成立,则说明当前页面为百度首页,并在输入框中输入 java
driver.findElement(By.xpath("//input[@id='kw']")).sendKeys("java");
}
}catch(NoSuchWindowException e){
e.printStackTrace();
}
//调用driver.switchTo().window()方法切到原页面,在输入框中输入old页面
driver.switchTo().window(OldHandle).findElement(By.xpath("//input[@id='input']")).sendKeys("old页面");
//断言页面源码包含 SeleniumElement
Assert.assertTrue(driver.getPageSource().contains("SeleniumElement"));
二十三、alert弹窗
HTML源码:
<input id='test' type='button' onclick="alert('这是一个alert弹框');" value='单击此按钮,弹出alert弹窗'>
java代码:
//定位Alert弹窗
WebElement At=driver.findElement(By.id("test"));
//点击alert按钮
At.click();
//选择alert弹窗
Alert alert=driver.switchTo().alert();
//获取alert弹窗中的文本内容
String text=alert.getText();
//校验alert弹窗中的文本
Assert.assertEquals(text,"这是一个alert弹框");
//点击alert弹窗中的确定按钮
alert.accept();
二十四、Confirm弹窗
HTML源码:
<input id='testcf' type='button' onclick="confirm('这是一个confirm弹框');" value='单击此按钮,弹出confirm弹窗'></input>
java代码:
//定位confirm按钮
WebElement Cf=driver.findElement(By.xpath("//*[@id='testcf']"));
Cf.click();
//选取alert弹窗
Alert confirm=driver.switchTo().alert();
//点击confirm弹窗上的确定按钮
confirm.accept();
//点击confirm弹窗上面的取消按钮
//confirm.dismiss();
二十五、prompt弹窗
HTML源码
<input id='testpt' type='button' onclick="prompt('这是一个prompt弹框');" value='单击此按钮,弹出prompt弹窗'></input>
Java代码
//定位prompt按钮
WebElement Cf=driver.findElement(By.xpath("//*[@id='testpt']"));
Cf.click();
//选取alert弹窗
Alert prompt=driver.switchTo().alert();
//在prompt弹窗的输入框中输入文字
prompt.sendKeys("在prompt弹窗中的输入框中输入123za。。。");
Thread.sleep(3000);
//点击prompt弹窗中的确定按钮
prompt.accept();
//点击Prompt弹窗中的取消按钮
//prompt.dismiss();
二十六、Frame(iFrame)中元素的定位和操作
frame标签有frameset、frame、iframe三种,frameset在selenium中跟其他普通标签没有区别,不需要层层切换,不影响正常的定位。而frame与iframe需要层层切,他俩对selenium定位而言是一样的,selenium有一组方法对frame(iFrame)进行操作。具体方法有如下几种(java代码中都有用到):
① 使用iframe标签的id或name属性值定位到iframe
② 使用WebElement方法定位到iframe
③ 使用index方法定位到iframe
④ 使用iframe中的HTML源码定位到iframe
HTML源码
<html>
<head>
<title>Frame</title>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
<meta content=always name=referrer>
</head>
<body>
<td>Input输入框</td>
<div id='put' >
<input type="text" id="input" name='ips'/>
</div>
<br>
<div id='iFrame'>
<td>Iframe1</td><br>
<iframe width=700 height=153 id=iFrameId frameborder=0 src="Xpath.html"></iframe>
<br>
<br>
<td>Iframe2</td><br>
<iframe width=700 height=150 name=iFrameName frameborder=0 src="Xpath.html"></iframe>
</div>
</body>
</html>
java代码
//通过iframe标签的id属性值定位到Iframe1中的iframe,并将控制权交给它
driver.switchTo().frame("iFrameId");
//定位iframe框架1中的输入框并输入 iFreme1
WebElement iF1=driver.findElement(By.xpath("//input[@id='input']"));
iF1.sendKeys("iFreme1");
//等2秒看效果
Thread.sleep(2000);
//清除文本
iF1.clear();
//控制权交回原来的界面
driver.switchTo().defaultContent();
//在外面的输入框中输入 defaultContend
WebElement in=driver.findElement(By.xpath("//input[@id='input']"));
in.sendKeys("defaultContend");
Thread.sleep(2000);
in.clear();
Thread.sleep(2000);
//通过iframe的name属性值定位Iframe2中的iframe,并将控制权交给它
driver.switchTo().frame("iFrameName");
//在Iframe框架2中的输入框中输入iFrame2
WebElement iF2=driver.findElement(By.xpath("//input[@id='input']"));
iF2.sendKeys("iFreme2");
Thread.sleep(2000);
iF2.clear();
//控制权交回原来的界面
driver.switchTo().defaultContent();
Thread.sleep(2000);
//通过WebElement方法定位到iFrame。
//通过iframe标签的height属性值定位iframe1
WebElement ifr1=driver.findElement(By.xpath("//iframe[@height='153']"));
//控制权交给iframe1
driver.switchTo().frame(ifr1);
//定位里面的输入框
WebElement iFrame1input=driver.findElement(By.id("input"));
//输入 WebElement
iFrame1input.sendKeys("WebElement");
Thread.sleep(2000);
//清除文本
iFrame1input.clear();
//控制权交给原来的界面
driver.switchTo().defaultContent();
//使用index方法进入指定iframe,索引号从 0 开始
//控制权交给iframe2。如果是0的话切到iframe1中
driver.switchTo().frame(1);
//定位里面的输入框
WebElement iFrame2input=driver.findElement(By.id("input"));
//输入 WebElement
iFrame2input.sendKeys("index");
//清除文本
Thread.sleep(2000);
iFrame2input.clear();
//控制权交给原来的界面
driver.switchTo().defaultContent();
Thread.sleep(2000);
//使用iframe中的HTML源码内容来定位操作iframe
//找到页面中所有iframe,并存储到iframes容器里
List<WebElement> iframes= driver.findElements(By.tagName("iframe"));
//遍历iframes中所有iframe页面,查找包含 iFrameId 的iframe页面
for(WebElement iframe:iframes){
//将控制权交给iframe
driver.switchTo().frame(iframe);
//逐个iframe页面进行判断是否包含 iFrameId 关键字
if(driver.getPageSource().contains("iFrameId")){
//判断成立说明找到指定iframe页面,则在当前iframe页面中的输入框中输入 PageSourceIFrameID
WebElement pg=driver.findElement(By.id("input"));
pg.sendKeys("PageSourceIFrameID");
//找到指定iframe后退出for循环
break;
}else{
//如果没有找到指定iframe,则退出当前iframe页面。for循环继续进入下一轮循环
driver.switchTo().defaultContent();
}
}
//找到指定iframe页面并执行完后面语句后退出当前iframe页面
driver.switchTo().defaultContent();
//在输入框中输入 控制权回到原点
driver.findElement(By.id("input")).sendKeys("控制权回到原点");
二十七、操作浏览器的Cookie
可以在浏览器开发者工具页面查看效果,查看cookies路径:APPlication->Cookies
java代码
import org.openqa.selenium.Cookie;
driver.get("http://www.baidu.com");
//获取cookies
Set<Cookie> data = driver.manage().getCookies();
System.out.println(data);
//获得cookies个数
System.out.println(driver.manage().getCookies().size());
//删除所有cookies
driver.manage().deleteAllCookies();
//获得cookies个数,此时cookies的个数为0
System.out.println(driver.manage().getCookies().size());
//设置cookies
Cookie c1 = new Cookie("addCookies", "123456789");
driver.manage().addCookie(c1);
//新增了一条,此时cookie个数为1
System.out.println(driver.manage().getCookies().size());
二十八、查看输入框输入的字符
java代码
driver.get("http://www.baidu.com");
WebElement input=driver.findElement(By.id("kw"));
input.sendKeys("Selenium");
//调用getAttribute方法获取到输入框中的文本内容,并赋给text
String text=input.getAttribute("value");
//断言
Assert.assertEquals("Selenium",text);
System.out.println(text);

浙公网安备 33010602011771号