文末有福利
在Selenium WebDriver中查找元素:“ FindElement”和“ FindElements”之间的区别
查找元素 | 查找元素 |
如果定位器发现了多个Web元素,则返回第一个匹配的Web元素 | 返回匹配的Web元素列表 |
如果找不到元素,则抛出NoSuchElementException | 如果找不到匹配的元素,则返回一个空列表 |
此方法仅用于检测唯一的Web元素 | 此方法用于返回匹配元素的集合。 |
有多种方法可以唯一地标识网页中的一个Web元素,例如ID,名称,类名,链接文本,部分链接文本,标记名和XPATH。
在Selenium WebDriver中查找元素:定位器策略/定位器类型
定位器策略可以是以下用于查找元素或FindElements的类型之一–
- ID
- Name
- ClassName
- TagName
- Link Text/Partial Link Text
- CSS Selector
- XPATH Selector
现在让我们尝试看看如何使用这些策略中的每一个来查找元素或元素。首先,我们将了解如何找到
通过ID查找
每个元素的ID都是唯一的,因此这是使用ID Locator定位元素的常用方法。这是检测元素的最常见最快,最安全的方法。建议网站开发人员避免使用非唯一ID或动态生成的ID,但是某些MVC框架(如– ADF)可能会导致页面具有动态生成的ID。
如果任何网站具有非唯一ID或具有动态生成的ID,则不能使用此策略唯一地查找元素,而是将返回与定位器匹配的第一个Web元素。我们将如何克服这种情况,将在XPATH / CSS选择器策略中进行说明。
句法:
public class LocateByID{public static void main (String [] args){// Open browserWebDriver driver = new FirefoxDriver();//instance of Chrome | Firefox | IE driverdriver.get();// Open ApplicationWebElement elm = driver.findElement(By.id("pt1:_UIShome::icon"));// will raise NoSuchElementException if not foundelm.click()//e.g- click the element}}
按名称查找
此方法类似于“按ID查找”,不同之处在于驱动程序将尝试通过“名称”属性而不是“ id”属性来查找元素。
句法:
public class LocateByName{public static void main (String [] args){// 打开浏览器WebDriver driver = new FirefoxDriver();//Chrome的实例| Firefox | IE驱动driver.get();// 输入URL地址WebElement elm = driver.findElement(By.name("name"));elm.sendKeys("Hi");//例如-在检测到的字段中键入Hi}}
现在,让我们继续前进,了解如何使用className在Selenium中查找元素。
按类别名称查找
此方法根据CLASS属性的值查找元素。更适用于查找具有针对它们定义的css类的多个元素。
句法:
driver.findElements(通过。的className ()); //对于元素列表
要么
driver.findElement(由className ()); //单个Web元素
public class LocateByClass { public static void main (String [] args){ // 打开浏览器 WebDriver driver = new FirefoxDriver();//Chrome的实例| Firefox | IE驱动 driver.get();// URL地址 List links = driver.findElements(By.className("svg-bkgd01 xi8"));//如果元素不存在,则返回一个空列表// 遍历列表并执行单个元素的逻辑}}
现在让我们了解如何使用TagName在Selenium中查找元素。
按标签名称查找
此方法根据元素的HTML标记名称查找元素。如果不能通过Id / name / link / className / XPATH / CSS检测到特定的Web元素,则该方法未被广泛使用并用作最后的手段。
语法:
driver.findElement(由tagName ()); //单个Web元素
driver.findElements(由tagName ()); //用于元素列表
public class LocateByTagName{ public static void main (String [] args){ // 打开浏览器 WebDriver driver = new FirefoxDriver(); driver.get(); WebElement ul = driver.findElement(By.id()); List links = ul.findElements(By.tagName("li")); ... }}
这是关于如何使用TagName查找元素的信息。让我们继续前进,看看如何使用LinkText查找元素
通过链接查找文本/部分链接
使用这种方法,可以找到带有链接名称或具有匹配的部分链接名称的“ a ”标签( Link )的元素。此策略仅适用于查找包含文本值的类型锚标记的元素。
语法
driver.findElement(通过linkText()); //单个Web元素
driver.findElements(通过linkText()); //用于元素列表
driver.findElement(按部分ialL inkText()); //单个Web元素driver.findElements(通过partialLinkText()); //用于元素列表
这是关于如何使用LinkText在Selenium中查找元素的方法。现在,让我们了解如何使用CSS选择器在Selenium中查找元素。
通过CSS选择器查找
对于生成动态ID的网站(例如基于ADF的应用程序)或基于最新的JavaScript框架(例如–无法生成任何ID或名称的React js)构建的网站,无法使用ID /名称策略定位器来查找元素。相反,我们必须使用CSS选择器或XPath选择器。
XPATHSelector
XPATH使用标准的XML查询语法,因此更具可读性,学习曲线也不那么陡峭。但是,CSS选择器虽然具有更简单的语法支持,但不像XPATH和其他文档支持那样是标准的,与XPATH不同。
以下是CSS选择器的一些主要使用格式–
- 标记和
- ID
- 标签和类别
- 标签和属性
- 标签,类和属性
- 子字符串匹配
- 以(^)开头
- 以($)结尾
- 包含(*)
- 子元素
- 直子
- 子孩子
- 第n个孩子
请参阅下面的屏幕截图–
带有ID的标签
css =标签#id
public class LocateByCSSSelector{ public static void main (String [] args){ WebDriver driver = new FirefoxDriver();//instance of Chrome | Firefox | IE driver driver.get(); WebElement el = driver.findElement(By.cssSelector("input#pt1:r1:0:rt:1:r2:0:dynamicRegion1:1:AP1:inputText562::content")); el.sendKeys("Location1"); } }