selenium webdriver学习(四)------------定位页面元素(转)
selenium-webdriver提供了强大的元素定位方法,支持以下三种方法。
- 单个对象的定位方法
- 多个对象的定位方法
- 层级定位
定位单个元素
在定位单个元素时,selenium-webdriver提示了如下一些方法对元素进行定位。
- By.className(className))
- By.cssSelector(selector)
- By.id(id)
- By.linkText(linkText)
- By.name(name)
- By.partialLinkText(linkText)
- By.tagName(name)
- By.xpath(xpathExpression)
注意:selenium-webdriver通过findElement()\findElements()等find方法调用"By"对象来定位和查询元素。By类只是提供查询的方式进行分类。findElement返回一个元素对象否则抛出异常,findElements返回符合条件的元素List,如果不存在符合条件的就返回一个空的list。
使用className进行定位
当所定位的元素具有class属性的时候我们可以通过classname来定位该元素。
下面的例子定位了51.com首页上class为"username"的li。
- import org.openqa.selenium.WebDriver;
- import org.openqa.selenium.WebElement;
- import org.openqa.selenium.By;
- public class ByClassName {
- public static void main(String[] args) {
- WebDriver driver = new FirefoxDriver();
- driver.get("http://www.51.com");
- WebElement element = driver.findElement(By.className("username"));
- System.out.println(element.getTagName());
- }
- }
输出结果:
- li
使用id属性定位
51.com首页的帐号输入框的html代码如下:
- <input id="passport_51_user" type="text" value="" tabindex="1" title="用户名/彩虹号/邮箱"
- name="passport_51_user">
在下面的例子中我们用id定位这个输入框,并输出其title,借此也可以验证代码是否工作正常。
- import org.openqa.selenium.By;
- import org.openqa.selenium.WebDriver;
- import org.openqa.selenium.WebElement;
- import org.openqa.selenium.firefox.FirefoxDriver;
- public class ByUserId {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- WebDriver dr = new FirefoxDriver();
- dr.get("http://www.51.com");
- WebElement element = dr.findElement(By.id("passport_51_user"));
- System.out.println(element.getAttribute("title"));
- }
- }
输出结果:
- 用户名/彩虹号/邮箱
使用name属性定位
51.com首页的帐号输入框的html代码如下:
- <input id="passport_51_user" type="text" value="" tabindex="1" title="用户名/彩虹号/邮箱"
- name="passport_51_user">
使用name定位
- WebElement e = dr.findElement(By.name("passport_51_user"));
使用css属性定位
51.com首页的帐号输入框的html代码如下:
- <input id="passport_51_user" type="text" value="" tabindex="1" title="用户名/彩虹号/邮箱"
- name="passport_51_user">
使用css定位
- WebElement e1 = dr.findElement(By.cssSelector("#passport_51_user"));
使用其他方式定位
在定位link元素的时候,可以使用link和link_text属性;
另外还可以使用tag_name属性定位任意元素;
定位多个元素
上面提到findElements()方法可以返回一个符合条件的元素List组。看下面例子。
- import java.io.File;
- import java.util.List;
- import org.openqa.selenium.By;
- import org.openqa.selenium.WebDriver;
- import org.openqa.selenium.WebElement;
- import org.openqa.selenium.firefox.FirefoxBinary;
- import org.openqa.selenium.firefox.FirefoxDriver;
- public class FindElementsStudy {
- /**
- * @author gongjf
- */
- public static void main(String[] args) {
- WebDriver driver = new FirefoxDriver();
- driver.get("http://www.51.com");
- //定位到所有<input>标签的元素,然后输出他们的id
- List<WebElement> element = driver.findElements(By.tagName("input"));
- for (WebElement e : element){
- System.out.println(e.getAttribute("id"));
- }
- driver.quit();
- }
- }
输出结果:
- passport_cookie_login
- gourl
- passport_login_from
- passport_51_user
- passport_51_password
- passport_qq_login_2
- btn_reg
- passport_51_ishidden
- passport_auto_login
上面的代码返回页面上所有input对象。很简单,没什么可说的。
层级定位
层级定位的思想是先定位父元素,然后再从父元素中精确定位出其我们需要选取的子元素。
层级定位一般的应用场景是无法直接定位到需要选取的元素,但是其父元素比较容易定位,通过定位父元素再遍历其子元素选择需要的目标元素,或者需要定位某个元素下所有的子元素。
下面的代码演示了如何使用层级定位class为"login"的div,然后再取得它下面的所有label,并打印出他们的文本
- import java.io.File;
- import java.util.List;
- import org.openqa.selenium.By;
- import org.openqa.selenium.WebDriver;
- import org.openqa.selenium.WebElement;
- import org.openqa.selenium.firefox.FirefoxBinary;
- import org.openqa.selenium.firefox.FirefoxDriver;
- public class LayerLocator {
- /**
- * @author gongjf
- */
- public static void main(String[] args) {
- WebDriver driver = new FirefoxDriver();
- driver.get("http://www.51.com");
- //定位class为"login"的div,然后再取得它下面的所有label,并打印出他们的值
- WebElement element = driver.findElement(By.className("login"));
- List<WebElement> el = element.findElements(By.tagName("label"));
- for(WebElement e : el)
- System.out.println(e.getText());
- }
- }
输出结果:
- 帐号:
- 密码:
- 隐身
- 下次自动登录
定位页面元素over了,下次写一下对frame的处理。
selenium webdriver学习(四)------------定位页面元素(转)的更多相关文章
- selenium webdriver学习-怎么等待页面元素加载完成
http://blog.csdn.net/aerchi/article/details/8055913 WebDriverWait类和ExpectedCondition
- selenium webdriver 学习笔记(二)
selenium webdriver 一.定位一组元素: webdriver可以很方便的使用findElement 方法来定位某个物定的对象.不过有时候我们却要定位一组对象,这时候就需要使用findE ...
- Selenium webdriver 学习总结-元素定位
Selenium webdriver 学习总结-元素定位 webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要 ...
- (java)selenium webdriver学习--通过id、name定位,输入内容,搜索,关闭操作、通过tagname查找元素
selenium webdriver学习--通过id.name定位,输入内容,搜索,关闭操作:通过tagname查找元素 打开谷歌浏览器,输入不同的网站,搜索框的定位含有不同元素(有时为id,有时为n ...
- selenium第三课(selenium八种定位页面元素方法)
selenium webdriver进行元素定位时,通过seleniumAPI官方介绍,获取页面元素的方式一共有以下八种方式,现按照常用→不常用的顺序分别介绍一下. 官方api地址:https://s ...
- (java)selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出
selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出: 该情况适合能能循环page=1~n,并且每个网页随着循环可以打开的情况, 注意一定是自己拼接的url可以 ...
- Python+Selenium自动化-定位页面元素的八种方法
Python+Selenium自动化-定位页面元素的八种方法 本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子. 0.元素定位方法主要有: id定位:find_elemen ...
- webdriver定位页面元素时使用set_page_load_time()和JavaScript停止页面加载
webdriver定位页面元素时使用set_page_load_time()和JavaScript停止页面加载 原文:https://my.oschina.net/u/2344787/blog/400 ...
- selenium webdriver学习(十)------------如何把一个元素拖放到另一个元素里面(转)
selenium webdriver学习(十)------------如何把一个元素拖放到另一个元素里面 博客分类: Selenium-webdriver 元素拖放drag and drop Q群里 ...
随机推荐
- Struts_登录练习(未配置拦截器)
1.在domain中建个User.java和其配置文件 并在hibernate.cfg.xml中加入配置 2.配置struts文件 3.在jsp文件中修改action地址和name属性,并标注错误信息 ...
- (转)Sql server中 如何用sql语句创建视图
1.视图的作用 视图的作用: 第一点:使用视图,可以定制用户数据,聚焦特定的数据. 解释: 在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话, 采购人员,可以需要一些与其 ...
- 有趣的HTML5 Web 存储
HTML5 web 存储,一个比cookie更好的本地存储方式. 什么是 HTML5 Web 存储? 使用HTML5可以在本地存储用户的浏览数据. 早些时候,本地存储使用的是 cookie.但是Web ...
- 利用Git搭建自动部署的Laravel环境 - 钟晨宇的博客 - CSDN博客
目标:服务器上搭建Laravel环境,本地使用IDE进行开发,使用Homestead做本地调试环境,代码提交后自动部署到服务器Root目录下. 下面是整个流程的示意图: 1. 准备工作,搭建LNMP ...
- CentOS安装fortune+cowsay
1.先找下看有没 2.安装 yum -y install fortune-mod 3.执行fortune 应该可以输出了,接着去弄中文词库,阮一峰的: git clone git@github.com ...
- SQL优化系列(三)- 用最少的索引获得最大的性能提升
从全局出发优化索引 对于高负载的数据库,如何创建最少的索引,让数据库的整体性能提高呢?例如,对于100 条SQL语句,如何创建最佳的5条索引? SQL自动优化工具SQL Tuning Expert P ...
- js流星雨效果
css部分 div { border: 0px solid #fff; border-width: 0px 90px 2px 90px; border-color: transparent trans ...
- 如何合并两个git commit
把你的修改stage之后运行: git rebase -i HEAD~2 然后把第二行的pick改成squash就ok啦 note: 同理,如果要合并多个commit,把后面的2改成你想要合并的com ...
- mysql操作手册
开启日志:https://segmentfault.com/a/1190000003072237 常用词: Mysql:一种免费的跨平台的数据库系统 E:\mysql:表示是在dos 命令窗口下面 ...
- Servlet接口
ServletRequest接口 ServletRequest的对象用于向Servlet提供客户端请求信息,如内容类型,内容长度,参数名称和值,标题信息,属性等. RequestDispatcher接 ...