Selenium - 定位器


在 Selenium WebDriver 中定位元素是借助 WebDriver 和 WebElement 类提供的 findElement() 和 findElements() 方法来执行的。

  • findElement() 根据指定的搜索条件返回 WebElement 对象,如果找不到任何与搜索条件匹配的元素,则最终抛出异常。

  • findElements() 返回与搜索条件匹配的 WebElements 列表。如果没有找到元素,则返回一个空列表。

下表列出了在 Selenium WebDriver 中定位元素的所有 Java 语法。

方法 句法 描述
通过ID driver.findElement(By.id (<元素 ID>)) 使用 ID 属性定位元素
按名字 driver.findElement(By.name (<元素名称>)) 使用 Name 属性定位元素
按类名 driver.findElement(By.className (<元素类>)) 使用 Class 属性定位元素
按标签名称 driver.findElement(By.tagName (<htmltagname>)) 使用 HTML 标签定位元素
通过链接文本 driver.findElement(By.linkText (<linktext>)) 使用链接文本定位链接
通过部分链接文本 driver.findElement(By.partialLinkText (<linktext>)) 使用链接的部分文本定位链接
通过CSS driver.findElement(By.cssSelector (<css 选择器>)) 使用 CSS 选择器定位元素
通过 XPath driver.findElement(By.xpath (<xpath>)) 使用 XPath 查询定位元素

定位器的使用

现在让我们借助https://www.calculator.net了解每种定位器方法的实际用法

通过ID

这里借助 ID 来访问对象。在本例中,它是文本框的 ID。使用 sendkeys 方法在 ID(cdensent) 的帮助下将值输入到文本框中。

SeleniumIDE 84

driver.findElement(By.id("cdensity")).sendKeys("10");

按名字

这里借助名称来访问对象。在本例中,它是文本框的名称。使用 sendkeys 方法在 ID(cdensent) 的帮助下将值输入到文本框中。

SeleniumIDE 85

driver.findElement(By.name("cdensity")).sendKeys("10");

按类别名称

这里借助类名来访问对象。在本例中,它是 WebElement 的类名称。可以借助 gettext 方法访问该值。

SeleniumIDE 86

List<WebElement> byclass = driver.findElements(By.className("smalltext smtb"));

按标签名称

元素的 DOM 标签名称可用于在 WebDriver 中定位该特定元素。借助这种方法,处理表格非常容易。看看下面的代码。

WebElement table = driver.findElement(By.id("calctable"));
List<WebElement> row = table.findElements(By.tagName("tr"));
int rowcount = row.size();

通过链接文本

此方法有助于定位具有匹配可见文本的链接元素。

SeleniumIDE 87

driver.findElements(By.linkText("Volume")).click();

通过部分链接文本

此方法有助于定位具有部分匹配可见文本的链接元素。

SeleniumIDE 87

driver.findElement(By.partialLinkText("音量")).click();

通过CSS

CSS 被用作识别 Web 对象的方法,但并非所有浏览器都支持 CSS 识别。

WebElement loginButton = driver.findElement(By.cssSelector("input.login"));

通过 XPath

XPath 代表 XML 路径语言。它是一种用于从 XML 文档中选择节点的查询语言。XPath 基于 XML 文档的树表示,并提供通过使用各种标准选择节点来在树中导航的能力。

SeleniumIDE 88

driver.findElement(By.xpath(".//*[@id = 'content']/table[1]/tbody/tr/td/table/tbody/tr[2]/td[1]/input")).sendkeys("100");