转自:http://www.blogjava.net/qileilove/archive/2013/12/25/408002.html
webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要高些,使用id,name属性定位元素是最可靠,效率最高的一种办法。
1、工具选择:在我们开发测试脚本的过程中各个浏览器给我们也提供了方便定位元素的工具,我比较喜欢使用firefox的firebug工具,也是目前很多开发测试人员比较热衷的选择,原因是firefox是唯一能够集成selenium IDE的浏览器,并且firebug给用户提供了丰富的扩展组件,我们可以根据自己的需要来选择,一般情况下,使用firebug+firefinder就足够使用了,firefinder支持xpath以及css选择器定位元素的功能,很方便帮助我们调试测试脚本
2、元素定位的方法:findElement() 与 findElements()
findElement() 该方法返回基于指定查询条件的webElement对象,或抛出不符合条件的异常 eg:driver.findElement(By.id("userID"));
findElements() 该方法返回指定查询条件的WebElement的对象集合,或返回null
3、WebElement对象提供的各种定位元素策略
ID:driver.findElement(By.id(<elementID>))
Name:driver.findElement(By.name(<elementName>))
className:driver.findElement(By.className(<elementClassName>))
tagName:driver.findElement(By.tagName(<htmlTagName>))
linkText:driver.findElement(By.linkText(<linkText>))
partialLinkText:driver.findElement(By.partialLinkText(<partialLinkText>))
css:driver.findElement(By.cssSelector(<cssSelector>))
xpath:driver.findElement(By.xpath(<xpathQuery>))
|
4、webelement类提供了诸多方法,在我们开发脚本过程中如何选择最可靠,效率最高的方法,使用id,name是首选,因为他们在html标签中是唯一的,所以是最可靠的
ID定位:driver.findElement(By.id("username"))
name定位:driver.findElement(By.name("username"))
class定位:driver.findElement(By.className("username"))
多学一招:WebElement类支持查询子类元素,如果页面中存在重复元素,但在不同div中,我们可以先定位到其父元素,然后定位其子元素,方法如下:
WebElement hello = driver.findElement(By.id("div1")).findElement(By.lindText("hello"));
5、使用WebElements定位多个相似的元素,比如页面中存在五个单选按钮,他们有相同的class属性,值为:myRadio,我们想对五个按钮循环操作,我们可以把它们全部取出来放到集合中,然后做循环操作,如下:
List<WebElement> radios = driver.findElements(By.className("myRadio"));
for(int i = 0;i<radios.size();i++){
radios.get(i).click();
}
|
其他定位方法与操作id,name类似,这里不再赘述,接下来我着重对css选择器与Xpath描述下
一、WebDriver 的By类中提供了cssSelector()方法,该方法使用有以下几种形式:
1、使用相对路径定位元素
如,我们要定为DOM中的input元素,我们可以这样操作,不考虑其在DOM中的位置,但这样做存在一定弊端,当DOM中存在多个input元素时,该方法总返回DOM中的第一个元素,这并不是我们所期待的
eg:WebElement username = driver.findElement(By.cssSelector("input"));
另外,为了使用这种方法更准确的定位元素,我们可以结合该元素的其他属性来实现精确定位的目的
a、结合id来定位,driver.findElement(By.cssSelector("input#username")); 在标签与id之间使用#连接,如果对css了解的朋友一看就知道为什么会这样写了,不了解也没关系,只要记住这种写法就OK了
另外该方法也可简写为driver.findElement(By.cssSelector("#username")); 有点儿类似于id选择器
b、使用元素的任何属性来定位元素
driver.findElement(By.cssSelector("标签名[属性名='属性值']"));
c、匹配部分属性值
^= driver.findElement(By.cssSelector("标签名[属性名^='xxx']")); 匹配属性值以xxx开头的元素
$= driver.findElement(By.cssSelector("标签名[属性名$='xxx']")); 匹配属性值以xxx结尾的元素
*= driver.findElement(By.cssSelector("标签名[属性名^='xxx']")); 匹配属性值包含xxx的元素
|
2、使用相对+绝对路径方法,这里是我自己定义的方法,方便记忆,的确也是这样来实现的
driver.findElement(By.cssSelector("div#login>input")) 该方法中“div#login>input” 首先通过相对路径定位到id为login的div元素,然后查找其子元素input(绝对路径)
二、使用xpath定位元素,相比cssSelector,xpath是我比较常用的一种定位元素的方式,因为它很方便,缺点是,消耗系统性能
1、使用绝对路径定位元素
driver.findElement(By.xpath("/html/body/div/form/input"))
2、使用相对路径定位元素
driver.findElement(By.xpath("//input")) 返回查找到的第一个符合条件的元素
3、使用索引定位元素,索引的初始值为1,注意与数组等区分开
driver.findElement(By.xpath("//input[2]")) 返回查找到的第二个符合条件的元素
4、结合属性值来定位元素
driver.findElement(By.xpath("//input[@id='username']"));
driver.findElement(By.xpath("//img[@alt='flowr']"));
5、使用逻辑运算符,结合属性值定位元素,and与or
driver.findElement(By.xpath("//input[@id='username' and @name='userID']"));
6、使用属性名来定位元素
driver.findElement(By.xpath("//input[@button]"))
7、类似于cssSlector,使用部分属性值匹配元素
starts-with() driver.findElement(By.xpath("//input[stars-with(@id,'user')]"))
ends-with driver.findElement(By.xpath("//input[ends-with(@id,'name')]"))
contains() driver.findElement(By.xpath("//input[contains(@id,"ernam")]"))
|
8、使用任意属性值匹配元素
driver.findElement(By.xpath("//input[@*='username']"))
9、使用xpath轴来定位元素
这里略了,详见w3school.com
三、使用innerText定位元素
1、使用cssSelector查找innerText定位元素
driver.findElement(By.cssSelector("span[textContent='新闻']"));
2、使用xpath的text函数
driver.findElement(By.xpath("//span[contains(text(),'hello')]")) 包含匹配
driver.findElement(By.xpath("//span[text()='新闻']")) 绝对匹配
相关推荐
全书共分为四个部分:第1部分基础篇主要讲解自动化测试相关的基础理论、WebDriver 环境安装、单元测试工具的使用方法以及 WebDrvier的入门使用实例,第2部分实战应用篇基于丰富的实战案例讲解页面元素的定位方法以及...
Selenium WebDriver 中使用 By.Xpath 快速定位页面元素 Selenium WebDriver 是一个自动化测试工具,可以模拟用户交互来对 Web 应用程序进行测试。其中,定位页面元素是自动化测试的关键步骤。By.Xpath 是一种快速...
在本文档中,我们学习了如何使用 Python 和 Selenium WebDriver 实现自动化测试,学习了元素定位的多种方式,包括使用浏览器工具、findElement 方法、findElements 方法等,并了解了多种定位策略。这些技术将帮助...
WebDriver 提供了多种元素定位策略,如ID、Name、XPath、CSS选择器等,以便准确找到页面上的元素进行操作。这些定位策略对于编写精确的测试脚本至关重要。 5. **事件处理**: WebDriver 可以模拟用户的各种交互...
4. **Support Library**:Selenium提供了Support Library,包含了许多实用的辅助类和枚举,如By、WebElement、Actions等,它们简化了元素定位、执行复杂操作和异常处理。 5. **Client-Comms JAR**:这是WebDriver与...
3. **元素定位**:讲解Selenium中用于查找网页元素的各种方法,如`find_element_by_id`、`find_element_by_name`、`find_elements_by_class_name`等,以及XPath和CSS选择器的使用。 4. **页面操作**:通过实例展示...
在本篇笔记中,我们将讨论 Selenium webdriver 的自动化测试中的对象定位方法。对象定位是自动化测试中非常重要的一步骤,它决定了我们的测试脚本是否能够正确地找到要测试的元素。 在 Selenium 中,我们可以使用...
Selenium WebDriver 提供了丰富的API用于元素定位,常见的定位策略包括: - **ID**:`driver.findElement(By.id("elementId"))` - **Name**:`driver.findElement(By.name("elementName"))` - **Class Name**:`...
在使用 Selenium 时,我们需要了解 Selenium 的核心概念,包括元素定位、元素操作和等待机制。元素定位是用于定位网页元素的,元素操作是用于模拟用户操作的,等待机制是用于等待元素加载的。 本教程将指导您如何...
例如,我们可以创建一个`WebDriver`实例来启动浏览器,然后通过`findElement`方法定位页面上的特定元素,接着使用`click`或`sendKeys`方法与这些元素进行交互。此外,还有`navigate`对象用于页面跳转,`manage`对象...
测试网页元素时,Selenium提供了多种定位方法,如ID、CSS选择器、XPath等。以查找并点击名为"CustomerInfo"的按钮为例: ```python button = driver.find_element_by_id('CustomerInfo') button.click() ``` 如果...
3. **元素定位**:通过CSS选择器、XPath或其他方法定位网页上的特定元素,进行交互或提取数据。 4. **处理JavaScript**:对于依赖JavaScript的页面,WebDriver可以执行JavaScript代码,例如通过`execute_script`方法...
在2.46.0版本中,Selenium提供了丰富的元素定位策略,如ById、ByName、ByXPath、ByCssSelector等,使得开发者可以根据HTML元素的不同属性进行定位。此外,它还支持等待操作,如隐式等待和显式等待,确保在进行操作前...
在WebDriver中,定位页面元素是通过`find_element_by_*`系列方法实现的,如`find_element_by_id`, `find_element_by_name`, `find_element_by_xpath`等。此外,还可以使用`find_elements_by_*`来查找多个匹配的元素...
综上所述,本书《selenium webdriver (python)第三版》是自动化测试学习者的一本必备参考书籍,它不仅为初学者提供了入门知识,也为中级和高级用户提供了深入的操作技巧和高级功能的实现方法。通过本书,读者可以...
1.4 selenium webdriver学习(四)------------定位页面元素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.5 selenium webdriver学习(五)------------iframe的处理 . . . . . . . . . ....