WebElement相关方法

1.点击操作

WebElement button =  driver.findElement(By.id("login"));
button.click();

由元素对象调用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">

上面代码是用户名输入框的源码,我们要获取这个"用户名"三个字就需要用到;

getAttribute(java.lang.String name) 这方法,代码如下:

WebElement username = driver.findElement(By.id("u"));
username.getAttribute("placeholder");

4.获取元素的文本

<input type="text" value="" autocomplete="off" placeholder="用户名" id="u" class="form-control" onblur="checkFailNum()" name="username">
WebElement login = driver.findElement(By.id("loginBtn"));
login.getText();

5.元素是否显示

方法有个返回值类型是boolean,也就是说如果元素显示了返回true,如果没有显示返回false;

WebElement login = driver.findElement(By.id("loginBtn"));
login.isDisplayed();

6.元素是否被选择

WebElement checkbox = driver.findElement(By.id("checkbox_id"));
checkbox.isSelected();
checkbox.isSelected();//会有返回值,如果勾选了。返回true,如果没有勾选返回false。

7.元素是否被启用

WebElement login = driver.findElement(By.id("loginBtn"));
login.isEnabled();
//如果可用返回true,如果不可用返回false

8.提交操作

<button class="btn btn-major" id="loginBtn" type="submit">登录</button>
WebElement login = driver.findElement(By.id("loginBtn"));
login.submit();

iFrame处理

有时候我们在定位一个页面元素的时候发现一直定位不了,反复检查自己写的定位器没有任何问题,代码也没有任何问题。这时你就要看一下这个页面元素是否在一个iframe中,这可能就是找不到的原因之一。如果你在一个default content中查找一个在iframe中的元素,那肯定是找不到的。反之你在一个iframe中查找另一个iframe元素或default content中的元素,那必然也定位不到。selenium webdriver中提供了进入一个iframe的方法:

WebDriver org.openqa.selenium.WebDriver.TargetLocator.frame(String nameOrId)

也提供了一个返回default content的方法:

WebDriver org.openqa.selenium.WebDriver.TargetLocator.defaultContent()
driver.switchTo().frame("id");//传入的是iframe的id

返回上一个iFrame:

driver.switchTo().defualContent();

select 操作下拉选择框

html代码:

<select style="width:75px" onchange="change_prodj()" name="province" id="province">
<option value="10">A 安徽</option>
<option value="11">A 澳门</option>
<option value="12">B 北京</option>
<option value="43">C 重庆</option>
<option value="13">F 福建</option>
<option value="14">G 甘肃</option>
<option value="15">G 广东</option>
<option value="16">G 广西</option>
<option value="17">G 贵州</option>
<option value="18">H 海南</option>
<option value="19">H 河北</option>
<option value="20">H 河南</option>
<option value="21">H 黑龙江</option>
</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(“北京”)//这个是根据可见文本来操作下拉菜单,比如你选的北京,那么就会找到北京作为下拉框的

处理alert 弹窗

获取当前页面弹出的alert

Alert  a= driver.switchTo().alert();
alert.accept();

获取到alert之后,我们可以通过alert提供的方法来获取alert上的文本,模拟点击alert上的确定按钮,模拟点击alert上的取消按钮等

处理浏览器弹出的新窗口

我们在一个页面上,点击一个链接之后不会在当前页面上打开此链接而是新开一个窗口打开此页面。那么我们如何跳转到新开的页面去操作新开的页面呢?selenium也提供了对应的API来处理。首先我们需要了解下,每个窗口都是有个句柄的,可以理解为浏览器窗口的标识符。我们可以根据这些标识符来确定新开的窗口,具体思路如下:

首先获得当前句柄:

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);

执行JS脚本

有时候我们需要JS脚本来辅助我们进行测试,比如我们用JS赋值或者用js执行点击操作等。

方法一:

声明js脚本

String js =“alert(\"hello,this is a alert!\")”;

执行js脚本

((JavascriptExecutor) driver).executeScript(js);

执行之后会在浏览器上弹出一个alert,显示内容是“hello,this is a alert!”

核心代码如下:

WebDriver driver = new FirefoxDriver();
String js ="alert(\"hello,this is a alert!\")";
((JavascriptExecutor) driver).executeScript(js);
Thread.sleep(2000);
driver.quit();

方法二:

这个方法比较适用某些元素不易点击的情况下使用,比如网页内容太长,当前窗口太长,想要点击那些不在当前窗口可以看到元素可以用此方法。
((JavascriptExecutor) driver).executeScript(String js, Object args);
此方法有两个参数,第一个是js脚本,至于js脚本你像写点击的或者输入的脚本都可以,我们这里举例为点击操作。第二个参数是:要点击的元素。
比如我要点击百度搜索的搜索按钮,可以这样写:
((JavascriptExecutor) driver).executeScript(“arguments[0].click();”, driver.findElement(By.id(“su”)));
核心代码如下:

WebDriver driver = new FirefoxDriver();
driver.get("https://www.baidu.com/");
String js ="arguments[0].click();";
driver.findElement(By.id("kw")).sendKeys("JAVA");
WebElement searchButton = driver.findElement(By.id("su"));
((JavascriptExecutor) driver).executeScript(js,searchButton);
Thread.sleep(2000);
driver.quit();

等待元素加载

1.硬性等待(不推荐)

Thread.sleep(int sleeptime);

2.智能等待

public void waitForElementToLoad(int timeOut, final By By) {
try {
(new WebDriverWait(driver, timeOut)).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
WebElement element = driver.findElement(By);
return element.isDisplayed();
}
});
} catch (TimeoutException e) {
Assert.fail("超时!! " + timeOut + " 秒之后还没找到元素 [" + By + "]",e);
}
}

3.设置等待页面加载完毕

int pageLoadTime = 10;
driver.manage().timeouts().pageLoadTimeout(pageLoadTime, TimeUnit.SECONDS);

鼠标事件

action类去操作鼠标

Actions 类提供了鼠标操作的常用方法:

· contextClick()    右击
· clickAndHold()   鼠标点击并控制
· doubleClick()    双击
· dragAndDrop()   拖动
· release()        释放鼠标

· perform()  执行所有Actions中存储的行为

鼠标右击操作。

导入提供鼠标操作的ActionChains 类
Actions(driver)
调用Actions()类,将浏览器驱动driver作为参数传入。
contexClick(xxx)
contextClick()方法用于模拟鼠标右键操作,在调用时需要指定元素定位。
perform() 执行所有ActionChains中存储的行为,可以理解成是对整个操作的提交动作。

 action.contextClick(driver.findElement(By.className("cnisdisd"))).perform();

鼠标悬停。clickAndHold();

 action1.clickAndHold(driver.findElement(By.linkText("设置"))).perform();

鼠标双击操作。
doubleClick()方法用于模拟鼠标双击操作。

 action1.doubleClick(driver.findElement(By.className(""))).perform();

鼠标拖放操作。
drag_and_drop(source, target)在源元素上按下鼠标左键,然后移动到目标元素上释放。
·source:鼠标拖动的源元素。
·target:鼠标释放的目标元素。

      WebElement source=driver.findElement(By.className("element"));
WebElement target=driver.findElement(By.className("element"));
action1.dragAndDrop(source, target).perform();

释放鼠标
release()方法用于释放鼠标事件。

 action1.release().perform();

 键盘事件

使用键盘按键方法前需要先导入keys类。
以下为常用的键盘操作:
sendKeys(Keys.BACK_SPACE)     删除键(BackSpace)
sendKeys(Keys.SPACE)              空格键(Space)
sendKeys(Keys.TAB)                  制表键(Tab)
sendKeys(Keys.ESCAPE)            回退键(Esc)
sendKeys(Keys.ENTER)              回车键(Enter)
sendKeys(Keys.CONTROL,'a')   全选(Ctrl+A)
sendKeys(Keys.CONTROL,'c')   复制(Ctrl+C)
sendKeys(Keys.CONTROL,'x')   剪切(Ctrl+X)
sendKeys(Keys.CONTROL,'v')    粘贴(Ctrl+V)
sendKeys(Keys.F1)                    键盘F1
……
sendKeys(Keys.F12)                 键盘F12

eg:
package com.cy.selenium;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver; public class Test02 {
public static void main(String[] args) {
WebDriver driver=new FirefoxDriver();
driver.manage().window().maximize();
driver.get("http://www.baidu.com/");
WebElement input =driver.findElement(By.id("kw"));
// 输入内容
input.sendKeys("seleniumm");
// 删除多余的m
input.sendKeys(Keys.BACK_SPACE);
// 输入空格+教程
input.sendKeys(Keys.SPACE);
input.sendKeys("教程");
// ctrl+a
input.sendKeys(Keys.CONTROL,"a");
// ctrl+x
input.sendKeys(Keys.CONTROL,"x");
// ctrl+v
input.sendKeys(Keys.CONTROL,"v");
// 通过回车键 查询
input.sendKeys(Keys.ENTER);
driver.close();
}
}

设置浏览器窗口大小

窗口最大化

driver.manage().window().maximize();

指定设置窗口大小

Dimension d = new Dimension
driver.manage().window().setSize(d);

指定窗口在屏幕中出现位置

Point p = new Point(500, 300);
driver.manage().window().setPosition(p);

参考:http://www.cnblogs.com/sundalian/p/5158907.html

java selenium常用API(WebElement、iFrame、select、alert、浏览器窗口、事件、js) 一的更多相关文章

  1. java selenium常用API汇总

    (WebElement.iFrame.select.alert.浏览器窗口.事件.js)     一 WebElement相关方法 1.点击操作 WebElement button = driver. ...

  2. Selenium Web 自动化 - Selenium常用API

    Selenium Web 自动化 - Selenium常用API 2016-08-01 目录 1 对浏览器操作  1.1 用webdriver打开一个浏览器  1.2 最大化浏览器&关闭浏览器 ...

  3. 《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)

    1.简介 从这一篇开始介绍和分享Java+Selenium+POM的简单自动化测试框架设计.第一个设计点,就是支持跨浏览器测试. 宏哥自己认为的支持跨浏览器测试就是:同一个测试用例,支持用不同浏览器去 ...

  4. 详解介绍Selenium常用API的使用--Java语言(完整版)

    参考:http://www.testclass.net/selenium_java/ 一共分为二十个部分:环境安装之Java.环境安装之IntelliJ IDEA.环境安装之selenium.sele ...

  5. Selenium2(java)selenium常用API 四

    WebElement相关方法 1.点击操作 WebElement button = driver.findElement(By.id("login")); button.click ...

  6. Selenium常用API的使用java语言之5-selenium元素定位

    1.selenium定位方法 Selenium提供了8种定位方式. id name class name tag name link text partial link text xpath css ...

  7. Selenium常用API的使用java语言之19-调用JavaScript代码

    虽然WebDriver提供了操作浏览器的前进和后退方法,但对于浏览器滚动条并没有提供相应的操作方法.在这种情况下,就可以借助JavaScript来控制浏览器的滚动条.WebDriver提供了execu ...

  8. Selenium常用API详解介绍

    转至元数据结尾   由 黄从建创建, 最后修改于一月 21, 2019 转至元数据起始   一.selenium元素定位 1.selenium定位方法 2.定位方法的用法 二.控制浏览器操作 1.控制 ...

  9. Selenium常用API用法示例集----下拉框、文本域及富文本框、弹窗、JS、frame、文件上传和下载

    元素识别方法.一组元素定位.鼠标操作.多窗口处理.下拉框.文本域及富文本框.弹窗.JS.frame.文件上传和下载 元素识别方法: driver.find_element_by_id() driver ...

随机推荐

  1. jquery获取父元素或父节点的方法

    jquery获取父元素方法比较多,比如parent(),parents(),closest()这些都能帮你实现查找父元素或节点,下面我们来一一讲解: 先举个例子: <ul class=" ...

  2. dstat 监控时,无颜色显示

    linux:Centos 6.6 dstat:0.7.0 注意,有这个提醒:Color support is disabled, python-curses is not installed good ...

  3. Dubbo学习(九) Dubbo面试问题

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合). 从服务模型的角度来看,Dubbo采用的是一种非常简单的 ...

  4. BZOJ5006 THUWC2017随机二分图(概率期望+状压dp)

    下称0类为单边,1类为互生边,2类为互斥边.对于一种匹配方案,考虑其出现的概率*2n后对答案的贡献,初始为1,如果有互斥边显然变为0,否则每有一对互生边其贡献*2.于是有一个显然的dp,即设f[S1] ...

  5. P3216 [HNOI2011]数学作业

    题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M ,要求计算Concatenate (1 .. N) Mod M 的值,其中 Concatenat ...

  6. 牛客OI赛制测试赛3 解题报告

    前话: 话说考试描述:普及难度. 于是想在这场比赛上涨点信心. 考出来的结果:Point:480     Rank:40 然而同机房的最好成绩是 510. 没考好啊!有点炸心态,D题一些细节没有注意, ...

  7. Round 1 Over

    终于把题目清单上的 \(dp\) 写完了\(hhh\)

  8. 【BZOJ1045】糖果传递(贪心)

    [BZOJ1045]糖果传递(贪心) 题面 BZOJ 洛谷 题解 秉承者娱乐精神,我们必须写一个费用流,并且相信信仰跑不过去. 于是写了一个\(zkw\)费用流如下:(您可以无视此份代码) #incl ...

  9. 【bzoj2876】 Noi2012—骑行川藏

    http://www.lydsy.com/JudgeOnline/problem.php?id=2876 (题目链接) 题意 在满足约束条件$${\sum_{i=1}^ns_ik_i(v_i-v_i' ...

  10. 网络对抗课题4.3.1 SQL注入原理与实践

    网络对抗课题4.3.1 SQL注入原理与实践 原理 SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞.也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符 ...