策略 语法 语法 描述
By id driver.findElement(By.id()) driver.findElements(By.id()) 通过id属性定位元素
By name driver.findElement(By.name()) driver.findElements(By.name()) 通过name属性定位元素
By class name driver.findElement(By.className()) driver.findElements(By.className()) 通过class属性定位元素
By tag name driver.findElement(By.tagName()) driver.findElements(By.tagName()) 通过HTML标签名定位元素
By link text driver.findElement(By.linkText()) driver.findElements(By.linkText()) 通过链接内容定位元素
By partial link text driver.findElement(By.partialLinkText()) driver.findElements(By.partialLinkText()) 通过部分链接内容定位元素
By css driver.findElement(By.cssSelector()) driver.findElements(By.cssSelector()) 通过css选择器定位元素
By xpath driver.findElement(By.Xpath()) driver.findElements(By.Xpath()) 通过xpath定位元素

findElement:

1. By id

使用id,name,class属性是定位元素的首选方法。其中,用元素的id是最首选的方法,是最快速的策略。

当发生下列情况时,无法使用id属性:

  • 不是所有的页面元素都拥有id属性
  • id属性的值是动态生成的

2. findElement()方法定位元素时,会查询整个DOM,然后返回第一个匹配的元素

3. WebElement类可支持查询子类元素。假设页面上有一些重复的元素,它们有不同的父元素。我们可以先定位其父元素,然后定位其子元素,方法如下:

WebElement father = driver.findElement(By.id("father"));
WebElement son = father.findElement(By.linkText("xxx"));

也可以将他们缩写成一行:

 WebElement son = driver.findElement(By.id("father")).findElement(BylinkText("xxx"));

4. NoSuchElementFoundException

findElement()和findElements()方法找不到相应的元素时,会抛出该异常。

findElements:

Selenium WebDriver的findElements()方法,可以得到指定规则的集合,适用于需要在一组相似的元素上进行操作的情况。

例:验证百度首页导航链接的数量,并打印出它们的超链接地址

实现代码:

 import java.util.List;

 import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test; import com.thoughtworks.selenium.SeleneseTestNgHelper; public class FindElements { @Test
public void test(){
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://www.baidu.com");
List<WebElement> links = driver.findElements(By.cssSelector("#u1 a"));
//获取集合中元素的总数量并转为String格式(下方assertEquals方法参数格式要求)
String size = String.valueOf(links.size());
//String size = Integer.toString(links.size());
//String size = links.size()+"";
//验证链接数量
SeleneseTestNgHelper.assertEquals("8", size); //打印href属性
//通过for循环获得list中的所有元素,再调用getAttribute()方法得到元素的属性
for(int i=0; i<links.size();i++){
System.out.println(links.get(i).getAttribute("href"));
}
driver.quit();
}
}

运行结果:

[selenium webdriver Java]元素定位——findElement/findElements的更多相关文章

  1. Java + Selenium + WebDriver八大元素定位方式

    UI自动化测试的第一步就是进行元素定位,下面给大家介绍一下Selenium + WebDriver的八大元素定位方式.现在我们就以百度搜索框为例进行元素定位,如下图: 一.By.name() Java ...

  2. PhantomJS + Selenium webdriver 总结-元素定位

    webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要高些,使用id,name属性定位元素是最可靠,效率最高的一 ...

  3. selenium webdriver python 元素定位

    总结   定位查找时,返回查找到的第一个match的元素.如果找不到,则 raise NoSuchElementException   单个元素定位: find_element_by_idfind_e ...

  4. Selenium webdriver Java 元素操作

    本来这些东西网上一搜一大堆,但是本着收集的精神,整理一份放着吧!哈!哈!哈! 1. 输入框(text field or textarea) WebElement element = driver.fi ...

  5. selenium自动化之元素定位方法

    在使用selenium webdriver进行元素定位时,有8种基本元素定位方法(注意:并非只有8种,总共来说,有16种). 分别介绍如下: 1.name定位 (注意:必须确保name属性值在当前ht ...

  6. Selenium Webdriver java 积累一

    Selenium Webdriver 学习: http://jarvi.iteye.com/category/203994 https://github.com/easonhan007/webdriv ...

  7. selenium webdriver 表格的定位方法练习

    selenium webdriver 表格的定位方法 html 数据准备 <html> <body> <div id="div1"> <i ...

  8. [selenium webdriver Java]常用api

    1. 获取元素文本 WebElement类的getText()方法返回元素的innerText属性.所以元素里如果有子节点一样也会被返回出来.如下所示 public class GetText { @ ...

  9. Python3-Selenium自动化测试框架(二)之selenium使用和元素定位

    Selenium自动化测试框架(二)之selenium使用和元素定位 (一)selenium的简单使用 1.导包 from selenium import webdriver 2.初始化浏览器 # 驱 ...

随机推荐

  1. 解决virtualbox 虚拟机不能ping通win7

    凭经验猜测是由于防火墙引起的,关闭防火墙再ping,果然可行.google说这是由于“win7 防火墙默认的禁ping策略”引起的.但是关闭防火墙很不安全,可以按照以下步骤为防火墙添加入站规则来解决问 ...

  2. MyBatis,动态传入表名,字段名的解决办法

    转载:http://luoyu-ds.iteye.com/blog/1517607 今天做项目,遇到的问题就是需求修改数据表的记录,而且字段名都不是固定的,也就是说是需要通过参数传入的, 本来这也不是 ...

  3. phpcms V9首页 频道页 列表页 推荐位 简单获取文章浏览量和评论统计

    phpcms V9首页 频道页 列表页 推荐位 简单获取文章浏览量和评论统计 列表取得数据方法: {pc:content action="lists" catid="$c ...

  4. 机器人学 —— 飞行机器人(Introduction)

    UPNN课程 aerial robotics 教授: VJ  Kummer 1.四旋翼飞行器的控制对象是各个旋翼对应的电机 2.飞行器的能源主要消耗于hovering. 3.飞行器在设计时需要考虑各个 ...

  5. 机器学习 —— 概率图模型(Homework: Representation)

    前两周的作业主要是关于Factor以及有向图的构造,但是概率图模型中还有一种更强大的武器——双向图(无向图.Markov Network).与有向图不同,双向图可以描述两个var之间相互作用以及联系. ...

  6. mysql字符串区分大小写的问题

    一.1. CREATE TABLE NAME(name VARCHAR(10)); 对这个表,缺省情况下,下面两个查询的结果是一样的: SELECT * FROM TABLE NAME WHERE n ...

  7. sql 存储过程 循环使用

    USE [clab] GO /****** Object: StoredProcedure [dbo].[sp_bd_getResultByEcd] Script Date: 08/06/2014 1 ...

  8. uboot---linux

    01uboot是没有虚拟地址的 02内存映射是linux内核的机制,也就是从实地址到虚拟地址是linux完成的! -----

  9. Struts2的简单案例

    第一步:首先下载struts2的架包(链接地址:http://download.csdn.net/detail/ahy1024/4626028) 第二步:新建web project项目 DemoStr ...

  10. 分批次获取git for windows的源代码

    $ git initInitialized empty Git repository in d:/SourceCode/GitHub/Git For Windows/Git/.git/ $ git r ...