Selenium Web 自动化 - 如何找到元素
Selenium Web 自动化 - 如何找到元素
2016-07-29
1. 什么是元素?
元素:http://www.w3school.com.cn/html/html_elements.asp
2. 定位方式解析
Selenium WebDriver 提供一个先进的技术来定位 web 页面元素。Selenium 功能丰富的API 提供了多个定位策略如:Name、ID、CSS 选择器、XPath 等等,如下图所示:

一般会用ID来定位,因为它是唯一的,xpath也比较通用,火狐浏览器插件:firepath和firebug是快速给出元素的xpath。
另外JQuery也是很好的定位方法
2.1 通过jQuery来定位元素
jQuery提供了find方法,来快速查找页面元素,但此方法也仅限使用了jquery库的页面。
2.1.1 如何判别页面使用了jQuery
打开火狐浏览器,输入谷歌地址:https://www.google.com.hk/,按F12调出控制台,接着在最下面的箭头处输入:“jQuery”,然后回车:
- 若控制台会返回:“function(e, t)” 这就表明此页面适用了jQuery库。
- 若控制台会返回错误提示:ReferenceError:jQuery is not defined 这就证明当前的页面没有适用到jQuery库
代码如下:
package WayToFindElement; import java.util.List;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.openqa.selenium.WebDriverException; public class FindByJquery { public static void main(String[] args) {
TestNotLoadJquery();
} private static void TestLoadedJquery() {
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
JavascriptExecutor jsExecutor = (JavascriptExecutor)driver;
driver.get("https://www.baidu.com"); List<WebElement> webElements = (List<WebElement>) jsExecutor.executeScript("return jQuery.find('a.mnav')");
Assert.assertEquals(webElements.size(),6);
Assert.assertEquals(webElements.get(2).getText(), "hao123");
driver.quit();
} private static void TestNotLoadJquery()
{
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
JavascriptExecutor jsExecutor = (JavascriptExecutor)driver;
driver.get("http://www.2345.com/");
if(!jQueryLoaded(jsExecutor)){
//如果检测到没有jquery库就执行注入操作
inJectJquery(jsExecutor);
}
//找到搜索一下按钮 元素
List<WebElement> searchButton = (List<WebElement>) jsExecutor.executeScript("return jQuery.find('input.sch_btn')");
//验证按钮的文本
Assert.assertEquals(searchButton.get(0).getAttribute("value"), "搜索一下");
driver.quit();
} /**注入jQuery支持*/
public static void inJectJquery(JavascriptExecutor jsExecutor){
jsExecutor.executeScript("var headID = document.getElementsByTagName(\"head\")[0];"
+ "var newScript = document.createElement('script');"
+ "newScript.type = 'text/Javascript';"
+ "newScript.src=\"http://code.jquery.com/jquery-2.1.4.min.js\";"
+ "headID.appendChild(newScript);");
} /**判断当前页面是否使用了jQuery*/
public static Boolean jQueryLoaded(JavascriptExecutor jsExecutor){
Boolean loaded = true;
try{
loaded = (Boolean) jsExecutor.executeScript("return jQuery()! = null");
}catch(WebDriverException e){
loaded = false;
} return loaded;
}
}
Selenium Web 自动化 - 如何找到元素的更多相关文章
- Selenium Web 自动化
1 Selenium Web 自动化 - Selenium(Java)环境搭建 2 Selenium Web 自动化 - 如何找到元素 3 Selenium Web 自动化 - Selenium常用A ...
- Selenium Web 自动化 - 项目实战(三)
Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述2 框架更改总览3 框架更改详解 3.1 解析新增页面目录 3.2 解析新增测试用例目录 3. ...
- Selenium Web 自动化 - Selenium(Java)环境搭建
Selenium Web 自动化 - Selenium(Java)环境搭建 2016-07-29 1 下载JDK JDK下载地址:http://www.oracle.com/technetwork/j ...
- Selenium Web 自动化 - Selenium常用API
Selenium Web 自动化 - Selenium常用API 2016-08-01 目录 1 对浏览器操作 1.1 用webdriver打开一个浏览器 1.2 最大化浏览器&关闭浏览器 ...
- Selenium Web 自动化 - 项目实战(一)
Selenium Web 自动化 - 测试框架(一) 2016-08-05 目录 1 框架结构雏形2 把Java项目转变成Maven项目3 加入TestNG配置文件4 Eclipse编码修改5 编写代 ...
- Selenium Web 自动化 - 项目持续集成(进阶)
Selenium Web 自动化 - 项目持续集成(进阶) 2017-03-09 目录 1 背景及目标2 环境配置 2.1 SVN的安装及使用 2.2 新建Jenkins任务3 过程分析 1 背景 ...
- Selenium Web 自动化 - 项目持续集成
Selenium Web 自动化 - 项目持续集成 2017-02-13 目录 1环境准备 1.1 安装git 1.2 安装jenkins 1.3 安装jenkins插件 1.4 jekins ...
- Selenium Web 自动化 - 项目实战环境准备
Selenium Web 自动化 - 项目实战环境准备 2016-08-29 目录 1 部署TestNG 1.1 安装TestNG 1.2 添加TestNG类库2 部署Maven 2.1 mav ...
- Selenium Web 自动化 - 项目实战(二)
Selenium Web 自动化 - 项目实战(二) 2016-08-08 什么是数据驱动?简答的理解就是测试数据决定了测试结果,这就是所谓数据驱动.数据驱动包含了数据,他就是测试数据,在自动化领域里 ...
随机推荐
- <script type="text/x-template"> 模板
获取动态的js模板可以用art-template插件 <script type="text/template"> 给<script>设置type=" ...
- Linux开源监控平台 -- Zabbix 小白安装以及使用
安装准备: 1.安装前需要先关闭selinux和firewall. 关闭Linux: [root@zabbix ~]# vi /etc/selinux/config 将SELINUX=enforcin ...
- 码云,git使用 教程-便签
码云,git使用 教程-便签 Code cloud, git use tutorial - note 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.c ...
- win10 共享 及 媒体流
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha
- tmux使用心得
1,在终端输入tmux命令进入tmux, control+b x,关闭tmux的初始化session 2,创建自己的session,然后进行分屏
- C++ 指针悬挂和赋值操作符的重载,拷贝构造函数实现
指针悬挂: 问题:使用new申请的内存内存空间无法访问,也无法释放. 原因:直接对指向new申请的存储空间的指针变量进行赋值修改 后果:失去了原来的地址,原来的空间无法访问也无法释放,造成内存泄漏 还 ...
- android studio 中去除应用标题栏
android studio 中去除应用标题栏 ㈠ ⒈ mainifests中设置: android:theme="@style/AppTheme"(即默认设置). ⒉ value ...
- 调用 微信接口报错 {"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
如下截图,仅为备份,本文转载地址: http://www.cnblogs.com/liaolongjun/p/6080240.html 以下正文↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ...
- android:制作 Nine-Patch 图片
它是一种被特殊处理过的 png 图片,能够指定哪些区域可以被拉伸而 哪些区域不可以. 那么 Nine-Patch 图片到底有什么实际作用呢?我们还是通过一个例子来看一下吧.比如 说项目中有一张气泡样式 ...
- 【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志
如题: docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志 场景再现: docker部署并启动 ...