selenium2常用API介绍
我们模拟web操作都是基于元素来操作的,我们首先要先确定元素,然后这个元素下对应的方法就可以看WebElement的方法。
1.点击操作
WebElement button=driver.findElement(By.id("login"));
button.click();
2.清除操作
WebElement username=driver.findElement(By.id("username_input"));
username.clear();
3.获取元素属性的值
<input type="text" value="" autocomplete="off" placeholder="用户名" id="u" class="form-control" onblur="checkFailNum()" name="username">
上面代码是用户名输入框的源码,我们要获取这个“用户名”三个字就需要用到:
WebElement WebElement username=driver.findElement(By.id("u"));
u.getAttribute(“placeholder”);
这样就能获取到“用户名”这三个字了。
4.获取元素的文本
<button class="btn btn-major" id="loginBtn" type="button">登录</button>
WebElement中提供一个getText()方法可以获取,代码如下:
WebElement login= driver.findElement(By.id(“loginBtn”));
login.getText();
5.判断元素是否显示
方法有个返回值类型是boolean,也就是说如果元素显示了返回true,如果没有显示返回false。
WebElement login= driver.findElement(By.id(“loginBtn”));
login.isDisplayed();
6.元素是否被选择
有这样的情况,复选框或者是单选框,我们需要判断这个框是不是被勾选了。
如果勾选了,返回true,如果没有勾选返回false。
WebElement checkbox= driver.findElement(By.id(“checkbox_id”));
checkbox.isSeelected();
7.元素是否被启用
有些按钮,可能在页面显示上被灰掉,就是不让点击,这个时候这个按钮是不可用的。
那么我们如何判断这个按钮是否能被点击呢?请用isEnabled()方法,如果可用返回true,如果不可用返回false。
WebElement login= driver.findElement(By.id(“loginBtn”));
login. isEnabled ();
8.提交操作
在有表单的界面上,可以不通过点击按钮进行提交操作,这就需要用到submit()方法
比如一个元素的源码:
<button class="btn btn-major" id="loginBtn" type="submit">登录</button>
此源码需要在一个表单(Form)中,并且type需要时submit类型,此时我们的代码可以这样写:
WebElement login= driver.findElement(By.id(“loginBtn”));
login. submit();
9.iframe
有时候我们在定位一个页面元素的时候发现一直定位不了,反复检查自己写的定位器没有任何问题,代码也没有任何问题。这时你就要看一下这个页面元素是否在一个iframe中,这可能就是找不到的原因之一。
页面源代码为:
<td>Iframe</td>
<td class="widgetStyle">
<iframe width=800 height=330 name=aa frameborder=0 src="./demo1.html"></iframe>
</td>
则
driver.switchTo().frame(“aa”); //传入的是iframe的Name
1.如果iframe标签有能够唯一确定的id或者name,就可以直接用id或者name的值:driver.switchTo().frame("aa");
2.如果iframe标签没有id或者name,但是我能够通过页面上确定其是第几个(也就是通过index来定位iframe,index是从0开始的):driver.switchTo().frame(0);
3.也可以通过xpath的方式来定位iframe,写法如下:
①WebElement iframe = driver.findElement(By.xpath("//iframe[@name='aa']"));
②driver.switchTo().frame(iframe);
如果要返回到以前的默认content,可以使用:
dr.switchTo().defaultContent();
10.操作下拉选择框
思路是:先定位出你要处理的下拉框(元素),然后将此元素传入Select对象中,接着用Select中的相关方法来选取下拉值
我们先要定位这个Select下拉框(元素)
WebElement element_province = driver.findElement(By.id(“province”));
然后把element传入Select
Select province = new Select(element_province);
然后由Select来操作下拉框
province.selectByIndex(0) //根据所选值的位置来选择下拉框值,从0开始
province.selectByValue(“18”) //根据value值来选择下拉框的值,比如这里的18,选择的就是海南
province .selectByVisibleText(“北京”)//这个是根据可见文本来操作下拉菜单,比如你选的北京,那么就会找到北京作为下拉框的值。
11.处理弹出来的对话框
Alert a = driver.switchTo().alert();此方法可以获取当前页面弹出的alert。
获取alert文本方法:a.getText();
模拟点击确定按钮:a.accept();
模拟点击取消按钮:a.dismiss();
12.处理浏览器弹出的新窗口
既然是新窗口,肯定是要先切换到新窗口,且每个窗口都有自己的句柄,唯一标识这个窗口,只要找到新窗口的句柄,问题就迎刃而解。
首先获得当前句柄,以便后边跳回:
String current_handles = driver. getWindowHandle();
出现新窗口之后,获取所有窗口句柄
Set<String> all_handles = driver.getWindowHandles();
循环判断,把当前句柄从所有句柄中移除,剩下的就是你想要的新窗口
Iterator<String> it = all_handles.iterator();
while(it.hasNext()){
if(current_handles == it.next()) continue;
//跳入新窗口
WebDriver window = dr.switchTo().window(it.next());
}
最后就可以在新窗口的页面进行相关操作了,在新窗口操作的时候使用新driver进行页面操作,新driver是window。
如果想回到最开始的窗口请使用:
driver.switchTo().window(current_handles);
13.执行JS脚本
有时候我们需要JS脚本来辅助我们进行测试,比如我们用JS赋值或者用js执行点击操作等。
方法一:
声明js脚本
String js =” alert(\"hello,this is a alert!\")”;
执行js脚本
((JavascriptExecutor) driver).executeScript(js);
执行之后会在浏览器上弹出一个alert,显示内容是“hello,this is a alert!”
方法二:
这个方法比较适用某些元素不易点击的情况下使用,比如网页内容太长,当前窗口太长,想要点击那些不在当前窗口可以看到元素可以用此方法。
((JavascriptExecutor) driver).executeScript(String js, Object args);
此方法有两个参数,第一个是js脚本,至于js脚本你像写点击的或者输入的脚本都可以,我们这里举例为点击操作。第二个参数是:要点击的元素。
比如我要点击百度搜索的搜索按钮,可以这样写:
((JavascriptExecutor) driver).executeScript(“arguments[0].click();”, driver.findElement(By.id(“su”)));