为什么需要Find Element/s命令?
与Web页面的交互需要用户定位Web元素。FindElement命令用于唯一地标识页面中的(单个)Web元素。然而,FindElements命令用于唯一地标识页面中的Web元素列表。
有多种方法可以标识页面中的Web元素,比如ID, Name, Class Name, Link Text, Partial Link Text, Tag名称和XPath。
FindElement语法糖如下:
FindElement命令接受By对象作为参数,并返回一个WebElement类型的对象。按对象依次可用于各种定位策略,如ID, Name, Class Name, XPath等。下面是Selenium WebDriver中的FindElement命令的语法
WebElement elementName;
elementName = driver.findElement(By.LocatorStrategy("LocatorValue"));
定位器策略(Locator Strategy)可以由下列值中的任何一个来执行:
ID
Name
Class Name
Tag Name
Link Text
Partial Link Text
XPATH
Locator值是唯一的值,可以使用它来标识Web元素。开发人员和测试人员有责任确保Web元素能够使用特定的属性(如id或Name)进行唯一的标识。
例如:
WebElement loginLink;
loginLink = driver.findElement(By.linkText("Login"));
FindElements语法糖如下:
FindElements命令同样接受By对象作为参数,并返回Web元素列表。如果没有找到使用给定定位器策略和定位器值的元素,则返回一个空列表。下面是FindElements命令的语法。
List<WebElement> elementName;
elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));
例如:
List<WebElement> listOfElements;
listOfElements = driver.findElements(By.xpath("//div"));
Find element Vs Find elements
下面是find element和find elements命令之间的主要区别。

Find Element | Find Elements |
---|---|
如果发现多个Web元素具有相同的定位器,则返回第一个Web元素 | 返回Web元素列表 |
如果没有匹配定位器策略的元素,则抛出异常NoSuchElementException | 如果没有匹配定位器策略的Web元素,则返回一个空列表 |
它只会找到一个Web元素 | 它将找到与定位器策略匹配的元素集合。 |
Not Applicable | 每个Web元素的索引都是从数字0开始的,就像数组一样 |
示例:如何使用Find Element命令
下面的应用程序用于演示练习,Demo使用主页:http://demo.guru99.com/test/ajax.html
场景:
打开AUT
查找单选按钮并点击
1package com.sample.stepdefinitions;
2import org.openqa.selenium.By;
3import org.openqa.selenium.WebDriver;
4import org.openqa.selenium.chrome.ChromeDriver;
5
6public class NameDemo {
7public static void main(String[] args) {
8// TODO Auto-generated method stub
9System.setProperty("webdriver.chrome.driver", "D:\\3rdparty\\chrome\\chromedriver.exe");
10WebDriver driver = new ChromeDriver();
11driver.manage().window().maximize();
12
13driver.get("http://demo.guru99.com/test/ajax.html");
14
15// Find the radio button for “No” using its ID and click on it
16driver.findElement(By.id("no")).click();
17
18//Click on Check Button
19driver.findElement(By.id("buttoncheck")).click();
20}
21}
示例:如何使用Find Elements命令
场景:
打开测试应用程序Under的URL
找到单选按钮的文本并将其打印到输出控制台
1package com.sample.stepdefinitions;
2
3import java.util.List;
4
5import org.openqa.selenium.By;
6import org.openqa.selenium.WebDriver;
7import org.openqa.selenium.WebElement;
8import org.openqa.selenium.chrome.ChromeDriver;
9
10public class NameDemo {
11
12public static void main(String[] args) {
13 System.setProperty("webdriver.chrome.driver", "X://chromedriver.exe");
14 WebDriver driver = new ChromeDriver();
15 driver.get("http://demo.guru99.com/test/ajax.html");
16 List<WebElement> elements = driver.findElements(By.name("name"));
17 System.out.println("Number of elements:" +elements.size());
18
19 for (int i=0; i<elements.size();i++){
20 System.out.println("Radio button text:" + elements.get(i).getAttribute("value"));
21 }
22 }
23}
总结
FindElement命令返回Web页面一个元素(如果有多个元素的定位器相同,则返回第一个)。
FindElements命令返回与定位器匹配的所有Web元素,是一个列表。
如果FindElement命令没有找到匹配条件的元素,则抛出NoSuchElementException。
如果没有匹配条件的元素,FindElements命令将返回一个空列表
本文分享自微信公众号 - 软测小生(ruancexiaosheng)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/3823827/blog/4368727