前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SeleniumWebDriver之FindElement和FindElements

SeleniumWebDriver之FindElement和FindElements

作者头像
软测小生
发布2019-09-12 15:05:13
2.5K0
发布2019-09-12 15:05:13
举报
文章被收录于专栏:软测小生

为什么需要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命令的语法

代码语言:javascript
复制
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)进行唯一的标识。 例如:

代码语言:javascript
复制
WebElement loginLink;loginLink  = driver.findElement(By.linkText("Login"));

FindElements语法糖如下: FindElements命令同样接受By对象作为参数,并返回Web元素列表。如果没有找到使用给定定位器策略和定位器值的元素,则返回一个空列表。下面是FindElements命令的语法。

代码语言:javascript
复制
List<WebElement> elementName;elementName  = driver.findElements(By.LocatorStrategy("LocatorValue"));

例如:

代码语言:javascript
复制
List<WebElement> listOfElements;listOfElements  = driver.findElements(By.xpath("//div"));

Find element Vs Find elements 下面是find element和find elements命令之间的主要区别。

Find element Vs 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

场景:

  1. 打开AUT
  2. 查找单选按钮并点击
代码语言:javascript
复制
package com.sample.stepdefinitions;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class NameDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.setProperty("webdriver.chrome.driver", "D:\\3rdparty\\chrome\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();

driver.get("http://demo.guru99.com/test/ajax.html");

// Find the radio button for “No” using its ID and click on it
driver.findElement(By.id("no")).click();

//Click on Check Button
driver.findElement(By.id("buttoncheck")).click();
}
}

示例:如何使用Find Elements命令 场景:

  1. 打开测试应用程序Under的URL
  2. 找到单选按钮的文本并将其打印到输出控制台
代码语言:javascript
复制
package com.sample.stepdefinitions;

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;

public class NameDemo {

public static void main(String[] args) {
    System.setProperty("webdriver.chrome.driver", "X://chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.get("http://demo.guru99.com/test/ajax.html");
    List<WebElement> elements = driver.findElements(By.name("name"));
    System.out.println("Number of elements:" +elements.size());

    for (int i=0; i<elements.size();i++){
      System.out.println("Radio button text:" + elements.get(i).getAttribute("value"));
    }
  }
}

总结

  • FindElement命令返回Web页面一个元素(如果有多个元素的定位器相同,则返回第一个)。
  • FindElements命令返回与定位器匹配的所有Web元素,是一个列表。
  • 如果FindElement命令没有找到匹配条件的元素,则抛出NoSuchElementException。
  • 如果没有匹配条件的元素,FindElements命令将返回一个空列表
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软测小生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么需要Find Element/s命令?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档