Selenium webdriver Java 查找元素
1.简单查找
By ID: WebElement element=driver.findElement(By.id("userId"));
By Name:WebElement element=driver.findElement(By.name("cheese"));
By TagName:WebElement element=driver.findElement(By.tagName("a"));
By ClassName:WebElement element=driver.findElement(By.className("login"));
By LinkText:WebElement element=driver.findElement(By.linkText("Blog");
这种方式很简单,只需要知道id等等属性值就好。那么问题来了,怎么知道属性值是什么呢?总不至于通过网页源码一个一个查看吧!其实Firefox 有一款很强大的插件,叫 Firebug。它是一款很经典的定位网页元素以及查看网页源码的插件。安装方法是在火狐的附加组件里搜索”Firebug",然后我这边选择的是 “Firebug 2.0.8",安装即可。
2.Xpath
关于Xpath的教程可以参考w3School:http://www.w3school.com.cn/xpath/
为了方便定位以及确认Xpath是否正确,Firefox也有一款插件叫Xpath finder。选择附加组件,然后搜索 Xpath即可看到,我这边的版本是 Xpath finder 1.02,点击安装即可。
Xpath使用路径表达式来选取XML文档中的节点或者节点集。
选取节点
下面列出了最有用的路径表达式:
表达式 | 描述 |
---|---|
nodename | 选取此节点的所有子节点。 |
/ | 从根节点选取。 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
. | 选取当前节点。 |
.. | 选取当前节点的父节点。 |
@ | 选取属性。 |
谓语
谓语用来查找某个特定的节点或者包含某个指定的值得节点。谓语被嵌在[]中。
在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:
路径表达式 | 结果 |
---|---|
/bookstore/book[1] | 选取属于 bookstore 子元素的第一个 book 元素。 |
/bookstore/book[last()] | 选取属于 bookstore 子元素的最后一个 book 元素。 |
/bookstore/book[last()-1] | 选取属于 bookstore 子元素的倒数第二个 book 元素。 |
/bookstore/book[position()<3] | 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。 |
//title[@lang] | 选取所有拥有名为 lang 的属性的 title 元素。 |
//title[@lang='eng'] | 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。 |
/bookstore/book[price>35.00] | 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。 |
/bookstore/book[price>35.00]/title | 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。 |
使用:WebElement element=driver.findElement(By.xpath("//ul[@class='nav logged_out']/li"));
表示首先查找class属性的值为 ”nav logged_out"的ul元素,然后查找到这些ul元素下面的所有li元素。
3.CSS选择器
其实大部分的元素都会有一个ID或者Name,这样通过方法1就可以解决,比较奇葩复杂的也全部可以通过XPath来解决。那么为啥还要用CSS呢?恩,据说是因为CSS是最快的。这个需要点CSS功底。想当初W3C的教程我可是看了好久。
CSS教程:http://www.w3school.com.cn/css/index.asp
使用:List<WebElement> webElements = webdriver.findElements(By.cssSelector("ul.nav li"));
.nav 代表 class="nav"。
#nav 代表 id="nav"。
ul 代表属性为 “ul"。
上面那句话的意思是选择所有class属性值为”nav"的ul下面的li。话说,有点绕啊~~
Selenium webdriver Java 查找元素的更多相关文章
- [selenium webdriver Java]检查元素是否存在
Selenium WebDriver没有实现Selenium RC的isElementPresent()方法来检查页面上的元素是否存在. 在WebDriver中封装一个类似的方法,如下: public ...
- Selenium Webdriver java 积累一
Selenium Webdriver 学习: http://jarvi.iteye.com/category/203994 https://github.com/easonhan007/webdriv ...
- Selenium webdriver 学习总结-元素定位
Selenium webdriver 学习总结-元素定位 webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要 ...
- [selenium webdriver Java]常用api
1. 获取元素文本 WebElement类的getText()方法返回元素的innerText属性.所以元素里如果有子节点一样也会被返回出来.如下所示 public class GetText { @ ...
- [selenium webdriver Java]元素定位——findElement/findElements
策略 语法 语法 描述 By id driver.findElement(By.id()) driver.findElements(By.id()) 通过id属性定位元素 By name driver ...
- [selenium webdriver Java]隐式的等待同步
Selenium WebDriver提供了隐式等待来同步测试.当使用了隐式等待执行测试的时候,如果WebDriver没有在DOM中找到元素,将继续等待,超出设定时间后,抛出找不到元素异常 即,当元素没 ...
- Selenium webdriver Java 封装与重用
目的 1. 简化调用 WebDriver对页面的操作,需要找到一个WebElement,然后再对其进行操作,比较繁琐: WebElement element =driver.findElement(B ...
- Selenium webdriver Java 高级应用
对于这一段还蛮有感慨的,只想说,代码还是需要自己去敲的. 1. 改变用户代理 import org.junit.AfterClass; import org.junit.BeforeClass; im ...
- Selenium WebDriver java 简单实例
开发环境 JDK 下载地址: http://www.oracle.com/technetwork/java/javase/downloads/index.html Eclipse: 下载地址:http ...
随机推荐
- JWT是什么?
# 转载请留言联系 什么是JWT? Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的 ...
- Ajax 入门笔记
AJAX =Asynchronous Javascript + XML,是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步 ...
- flask的插件
详情参考官方文档 组件一:flask-session 安装: pip install flask-session 使用方法:先导入 from flask_session import Sess ...
- VS2010编写C++程序出现error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”?
用VS2010编写C++程序,编译时出现如下错误: 修改方法: 右击项目,选择属性 点击确定,重新编译,错误解决.
- 只有5行代码的算法——Floyd算法
Floyd算法用于求一个带权有向图(Wighted Directed Graph)的任意两点距离的算法,运用了动态规划的思想,算法的时间复杂度为O(n^3).具体方法是:设点i到点j的距离为d[i][ ...
- C# 连接和操作SQL SERVER数据库
用C#sqlserver实现增删改查http://www.worlduc.com/blog2012.aspx?bid=730767 using System.Data;using System.Dat ...
- oracle 11g在大表中添加字段及默认值--加速
今天遇到这个问题了.简单的增加语句,默认SQLPLUS执行,却会超时. 要增加客户端的TIMEOUT时间才可以解决.(感觉超过两三分钟,默认超时30秒) 另外, 也可以用两步操作(1,增加字段,2,修 ...
- Nodejs微信开发
因为使用了Bot Framework开发了一个小功能,它目前支持了Skype\Teams\Slack等,但在国内来讲,微信还是一个比较流行的软件,所以需要接上微信 原来开发Bot的时候使用的是.Net ...
- 使用threadpool并发测试,报错HTTPConnectionPool Max retires exceeded
解决方法:和以下答案一致 https://blog.csdn.net/qq_21405949/article/details/79363084 场景: 在做爬虫项目或者是在发送网络请求的时候,一般都会 ...
- django URL参数在view中传递和Template的反向解析方式
一. URL参数在view中传递 1.带参数名:通过named group方式传递指定参数,语法为: (?P<name>pattern), name 为传递参数的名称,pattern代表所 ...