我们模拟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”)));

selenium2常用API介绍的更多相关文章

  1. 小程序常用API介绍

    小程序常用API接口  wx.request https网络请求 wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 method:"GET&qu ...

  2. appium 常用api介绍(2)

    前言:接着上一篇继续讲常用的一些api 参考博文:http://blog.csdn.net/bear_w/article/details/50330565 1.send_keys send_keys( ...

  3. appium 常用api介绍(1)

    前言:android手机大家都很熟悉,操作有按键.触摸.点击.滑动等,各种操作方法可以通过api的方法来实现. 参考博文:http://blog.csdn.net/bear_w/article/det ...

  4. Splinter常用API介绍(转)

    # Example from splinter import Browser with Browser() as browser: # Visit URL url = "http://www ...

  5. java===字符串常用API介绍(转)

    本文转自:http://blog.csdn.net/crazy_kid_hnf/article/details/55102861 字符串基本操作 1.substring(from,end)(含头不含尾 ...

  6. java-org.dom4j常用api介绍

    //导入必要的包 import org.dom4j.Document;//Document文档类 import org.dom4j.Element//元素节点类 import org.dom4j.QN ...

  7. java中FILE类常用API介绍

  8. APPIUM 常用API介绍(3)

    1.send_keys send_keys(self, *value): Simulates typing into the element[在元素中模拟输入(开启appium自带的输入法并配置了ap ...

  9. 四. 几个Promise常用API的介绍与使用

    四. 几个常用API的介绍与使用 1. Promise构造函数:Promise(excutor){} excutor函数:同步执行 (resolve, reject) => {} resolve ...

随机推荐

  1. 物体检测丨从R-CNN到Mask R-CNN

    这篇blog是我刚入目标检测方向,导师发给我的文献导读,深入浅出总结了object detection two-stage流派Faster R-CNN的发展史,读起来非常有趣.我一直想翻译这篇博客,在 ...

  2. nuxt实践

    利用手脚架搭起来的服务端渲染实例目录结构.nuxtassets 未编译的静态资源如 LESS.SASS 或 JavaScriptcomponents 用于组织应用的 Vue.js 组件middlewa ...

  3. 一个很好用的侧滑框架ICSDrawerController实现的 QQ 侧滑及换肤功能

    使用ICSDrawerController 实现侧滑功能 在ICSDrawerController 第三方上做了修改实现,QQ 点击头像打开关抽屉头像渐变的效果 - (void)hiddenHeadV ...

  4. js字符串与十六进制之间的转换

    在寻找加密解密的时候看到一个方法,代码图片转换.原理为:字符可以转为16进制,与图片RGB的一个R/G/B相对应,即一个像素点可容纳3个字符(注:Canvas的RGBA,透明度A似乎不能使用,使用后, ...

  5. Volley与Picasso的对比

    Volley与Picasso的对比 想写一篇文章来对比一下Volley以及Picasso,有人或许会说了,Volley和Picasso的服务对象都不同,Picasso是专注于图片的下载以及处理,而Vo ...

  6. Burpsuite Professional安装及使用教程

    转自:https://www.jianshu.com/p/edbd68d7c341 1.先从吾爱破解论坛下载工具:https://down.52pojie.cn/Tools/Network_Analy ...

  7. Easyui validatebox后台服务端验证

    Easyui validatebox的验证提示十分好用,可是在实际项目的运用中,经常会遇到需要服务器验证后并返回验证结果信息,比如验证用户名.手机号.邮箱是否已存在.于是就想着怎么拓展Easyui的验 ...

  8. 测试的发现遗漏BUG的做法

    首先要确认BUG的影响范围: 后续做法如下: 1.从测试角度来说,外部缺陷等同与系统崩溃,测试是必须提的2.可以询问主管或负责人是否在后一个版本中修改3.评估缺陷对于用户使用存在多大的不便4.判定缺陷 ...

  9. fpga Verilog hdl 按键消抖 部分程序讲解

    module debounce(clk_in,rst_in,key_in,key_pulse,key_state); input clk_in;//system clock input rst_in; ...

  10. 结构化查询语言-SQL

    结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程 ...