findElement() 方法返回一个元素, 如果没有找到,会抛出一个异常 NoElementFindException()
findElements()方法返回多个元素, 如果没有找到,会返回空数组, 不会抛出异常。
语法:WebElement element = driver.findElement(By.XXXX("XXXX"));
以下为定位方式:by.后面的
| id,name,className,tagName,linkText("链接的全部文字"),partialLinkText("链接的部分文字"),cssSelector(“css表达式”),xpath("//input[@id='XXXX']") |
|
xpath地址常见语法(详细内容见另笔记)://XXXX[@XX='XXXX'] 或 //XXXX[contains,(@XXXX,'XXXX')] 或 //*[@id='list']/li[1]/div[2]/span[1]
|
driver.navigate().back(); //回到上一页
driver.navigate().forward(); //跳转下一页
driver.getTitle(); // 获取当前页面的标题
driver.getCurrentUrl(); // 获取当前页面的url
WebElement.click();
WebElement.clear(); //清空
WebElement.sendKeys("掘金网"); //输入文本
WebElement.sendKeys("c:\shao.png");
WebElement.getText();
WebElement.isEnabled() //是否可点击
WebElement.isSelected(); //是否选中
WebElement.isDisplayed() //是否显示
需要先实例化一个Actions,且每次点击都必须添加perform(翻译:执行)
Actions action = new Actions(driver);
action.click().perform(); //鼠标左击
action.contextClick().perform(); //鼠标右击
action.doubleClick().perform(); //鼠标双击
action.moveToElement(WebElement XX).perform(); //鼠标悬停
// 鼠标拖动实现
driver.findElement(By.xpath("//*[@id='tbPic']")).click();
WebElement begin = driver.findElement(By.xpath("//*[@id='list']/li[1]/div[2]/span[1]"));
WebElement end = driver.findElement(By.xpath("//*[@id='list']/li[2]/div[2]/span[1]"));
action .dragAndDrop(begin, end).perform();
action .dragAndDropBy(WebElement element, int x, int y).perform(); //将element元素水平拖动x,垂直拖动y像素
//单选框
WebElement radio=driver.findElement(By.id("XXXXX"));
radio.isSelected(); //判断某个单选项是否被选中
radio.click(); //选择某个选项
radio.clear(); //清空选项
//复选框
WebElement checkbox = driver.findElement(By.id("XXXXX"));
checkbox.isSelected();//是否选中
checkbox.click();
//下拉框选择
Select select = new Select(driver.findElement(By.id("frequency")));
select.selectByValue("1");
driver.findElement(By.id("validDays")).click();
Alert alert = driver.switchTo().alert();
alert.accept(); //确定
alert.dismiss(); //取消
WebElement iframeElement = driver.findElement(By.xpath("//iframe[contains(@id,'x-URS-iframe')]"));
driver.switchTo().frame(iframeElement);
//要操作原页面元素,需要切回
driver.switchTo().defaultContent(); //回到默认的页面
driver.switchTo().parentFrame(); //切回父级框
getWindowHandle(); 与 getWindowHandles();
//举例说明
public void windowshandle() {
windowsHandle = driver.getWindowHandle(); //获取当前页面handle
Set<String> handles = driver.getWindowHandles(); //获取浏览器所有页面handle
for(String s : handles) { //JDK1.5 for循环新写法,简洁效率
if(s.equals(windowsHandle)) {
continue; //遍历,如果handles中的一个handle等于当前页面handle,说明没切换页面,跳出本次循环,继续下次循环
}
System.out.println(s);
driver.switchTo().window(s);
}
driver.findElement(By.linkText("案例")).click();
}
//分3种等待:
强制等待,休眠线程(死等):Thread.sleep(2000); //等待2s
隐式等待: 如果在规定的时间,找到了元素就继续操作,否则就报错(#条件满足,还是会继续等待完时间)
* 语法: driver.manage().timeouts().implicitlyWait(timeout, TimeUnit.SECONDS);
* (第一个参数将接受时间作为整数值,例如10(共等待10s),第二个参数将接受时间测量)
* 应用场景:全局,例如所有元素在10s没出现都抛出异常
显示等待:如果在规定的时间内,满足条件就继续操作,否则就报错(#条件满足就操作,不继续等待)
* 使用前先实例化: WebDriverWait wait = new WebDriverWait(driver,timeout);
* (第一个参数为WebDriver对象,第二个参数为整数时间,例如10(共等10s))
* 语法:(ExpectedConditions类中方法)wait.until(ExpectedConditions.XXXX);
ExpectedConditions方法:
.elementSelectionStateToBe()
例如://判断某个元素的选中状态是否符合预期
ExpectedConditions.elementSelectionStateToBe(By.xpath("//*[@id='kw']"), true);
//判断某个元素(已定位)的选中状态是否符合预期
ExpectedConditions.elementSelectionStateToBe(driver.findElement(By.xpath("//*[@id='kw']")), false);
.elementToBeSelected()
例如://判断某个元素是否被选中,一般用在下拉列表
ExpectedConditions.elementToBeSelected(By.xpath("//*[@id='kw']"));
.frameToBeAvaliableAndSwitchToIt()
例如://判断该表单是否可以切过去,可以就切过去并返回true,否则放回false
ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("**"));
.invisibilityOfTheElementLocated()
例如://判断某个元素是否不存在于DOM或不可见
ExpectedConditions.invisibilityOfElementLocated(By.xpath("//*[@id='kw']"));
.invisibilityOfElementWithText()
.presenceOfAllElementsLocatedBy()
例如://只要存在一个就是true
ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//*[@id='kw']"));
.textToBePresentInElement()
.textToBePresentInElementLocated()
例如://元素中的text是否包含语气的字符串
ExpectedConditions.textToBePresentInElementLocated(By.xpath("//*[@id='kw']"), "百度一下");
.visibilityOfAllElements()//判断所有元素是否可见
.textToBePresentInElementValue()
例如://元素的value属性中是否包含XXXX的字符串
ExpectedConditions.textToBePresentInElementValue(By.xpath("//*[@id='kw']"), "XXXX");
.titleIs() //标题是不是XXXX
.titleContains() //标题是否包含XXXX
.visibilityOf()
例如://判断元素(定位后)是否可见
ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//*[@id='kw']")));
.alertIsPresent()//判断页面中是否存在alert
.visibilityOfAllElementsLocatedBy()
.visibilityOfElementLocated()
例如://判断元素是否可见(非隐藏,并且元素的宽和高都不等以0)
ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='kw']"));
.presenceOfElementLocated(By.id("XXX"))
例如://判断该元素是否被加载在DOM中,并不代表该元素一定可见
ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='kw']"));
.elementToBeClickable(By.id("XXX"))
例如://判断元素是否可以点击
ExpectedConditions.elementToBeClickable(By.xpath("//*[@id='kw']"));
- 转 .md即markdown文件的基本常用编写语法(图文并茂)
原文链接:.md即markdown文件的基本常用编写语法(图文并茂) 序言: 很久没有写博客了,感觉只要是不写博客,人就很变得很懒,学的知识点感觉还是记不住,渐渐地让我明白,看的越多,懂的越少(你这话 ...
- Vue常用模板语法
常用模板语法 本篇将在上一篇的基础上记录文本渲染.表达式.过滤器以及常用指令的简单用法. 一.文本渲染 Vue支持动态渲染文本,即在修改属性的同时,实时渲染文本内容.同时为了提高渲染效率,也支持只 ...
- EditPlus轻量级编辑器配置常用的语法规则!
打开EditPlus编辑器:工具 ---- 参数设置 ---- 文件 ---- 设置&语法: 先配置简单的CSS语法: 勾选下面的 “自动完成” ,加载对应的ACP文件,配置一些常用的语法: ...
- layui js 常用语句语法
烂笔头: layui组件使用 注意layui的版本. 在head里需要引入css/js文件. 出现 form.verify,form.val is not a function的错误信息时,注意版本, ...
- chrome浏览页面常用快捷键
1.chrome浏览页面常用快捷键 Ctrl+N 打开新窗口. Ctrl+T 打开新标签页. Ctrl+W关闭当前标签 Ctrl + F4 关闭chrome浏览器 Ctrl+Tab 或 Ctrl+Pg ...
- .md 即 markdown 文件的基本常用编写语法
0. 前言 Markdown 是一种纯文本格式的标记语言.通过简单的标记语法,它可以使普通文本内容具有一定的格式.现在的项目都使用了 git 仓库,再加上远程仓库 github 托管,那就难免要写一些 ...
- Thinkcmf:页面常用函数
Thinkcmf:页面常用函数 全站seo: 文章列表: {$site_seo_title} <!--SEO标题--> {$site_seo_keywords} < ...
- MatplotLib常用基本操作
本文记录matlibplot常用基本操作,都是基本功能,不涉及复杂联合操作,其中各用法详细用法可参考官网: 1. 基本画图操作 ##mofan_matplotlib.pyplot import mat ...
- 移动端和PC端页面常用的弹出层
我们在页面的时候,很多时候用到了弹出层,消息提醒,确认框等等,统一样式的弹出框可以使页面更加优美.在此,我整理一下我们项目的移动端和PC端页面常用的弹出层. 一.移动端 我们需在页面引入弹出框的样式和 ...
随机推荐
- js 过滤富文本标签数据
var str = '<p><code>uni-app</code> 完整支持 <code>Vue</code> 实例的生命周期,同时还新增 ...
- 将 vue.js 获取的 html 文本转化为纯文本
我存入数据表中的数据是使用 html 格式,获取数据是使用 vue 获取. 遇到了一个问题,就是界面上显示的数据是 html 格式的,但是我需要它显示纯文本. 怎么做呢?首先在 js 中写一个将 ...
- supersocket实现你的命令
现在, 如果你有一个命令行协议的服务器实例 "IronPythonServer", 而且我们要用 Python 创建一个 "ADD" 命令用于让两个整数相加,然 ...
- rsa加密(非对称加密)
rsa加密 是非对称加密 需要公钥 与 私钥 这个公钥私钥的具体值需要与后端协商定下 rsa js代码如下 代码太多不插入了 html代码如下 <!DOCTYPE html> <ht ...
- 三分钟学会@Autowired@Qualifier@Primary注解
三分钟学会@Autowired@Qualifier@Primary注解 2018.10.08 20:24 154浏览 今天主要简单的跟大家介绍一下spring自动装配相关的@Autowired,@Qu ...
- 深入java面向对象四:Java 内部类种类及使用解析(转)
内部类Inner Class 将相关的类组织在一起,从而降低了命名空间的混乱. 一个内部类可以定义在另一个类里,可以定义在函数里,甚至可以作为一个表达式的一部分. Java中的内部类共分为四种: 静态 ...
- 21个项目玩转深度学习:基于TensorFlow的实践详解01—MNIST机器学习入门
数据集 由Yann Le Cun建立,训练集55000,验证集5000,测试集10000,图片大小均为28*28 下载 # coding:utf-8 # 从tensorflow.examples.tu ...
- H3C在设备上使用TFTP服务
- 响应式自适应布局代码,rem布局
响应式自适应布局代码 首先是先设置根字体大小,PC端一般是16px为根字体,移动端会有不同的,根据情况来设置 js部分 document.querySelector('html').style.fon ...
- ASP.NET MVC4.0+EF+LINQ+bui+bootstrap+网站+角色权限管理系统(2)
创建公共分页参数类Common/GridPager.cs using System; using System.Collections.Generic; using System.Linq; usin ...