链接文本和部分链接文本 Selenium

⚡ 智能摘要

链接文本和部分链接文本 Selenium 通过锚文本定位网页上的超链接。`By.linkText()` 方法匹配完整的文本,而 `By.partialLinkText()` 方法匹配部分文本。这两个定位器都区分大小写,并返回第一个匹配项。

  • 🔗 链接文本已定义: 通过可见的锚文本定位页面上的超链接。
  • 🎯 By.linkText(): 匹配完全一致的链接文本,并返回第一个匹配项。
  • 🔎 By.partialLinkText(): 匹配链接文本的一部分,并返回第一个匹配项。
  • 🔠 区分大小写: 两种定位器都将大写视为重要因素,因此“egis”和“EGIS”有所不同。
  • 🧱 多个/多个链接: 对于重复项,请使用 xpath 或 cssSelector;这两种方法都适用于块级标签内部或外部。

链接文本和部分链接文本 Selenium

链接文本 Selenium?

A 链接文本 Selenium 用于识别网页上的超链接。它通过锚标记来确定。为了在网页上创建超链接,我们可以使用锚标记,后跟链接文本。

符合条件的链接

可以使用链接文本的完全匹配或部分匹配来访问链接。下面的示例提供了存在多个匹配的场景,并解释了 WebDriver 如何处理它们。

在本教程中,我们将学习使用 Webdriver 查找和访问链接的可用方法。此外,我们将讨论访问链接时遇到的一些常见问题,并进一步讨论如何解决这些问题。

完整链接文本 Selenium – 通过.linkText()

通过 By.linkText() 方法使用其精确的链接文本访问链接。但是,如果有两个链接具有完全相同的链接文本,则此方法将仅访问第一个链接。请考虑以下 HTML 代码

链接文本 Selenium–By.LinkText()

链接文本 Selenium–By.LinkText()

当你尝试运行下面的 WebDriver 代码时,你将访问第一个“单击此处”链接

链接文本 Selenium–By.LinkText()

代码:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class MyClass {

    public static void main(String[] args) {
        String baseUrl = "https://demo.guru99.com/test/link.html";
        System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();

        driver.get(baseUrl);
        driver.findElement(By.linkText("click here")).click();
        System.out.println("title of page is: " + driver.getTitle());
        driver.quit();
    }

}

下面是它的工作原理-

链接文本 Selenium–By.LinkText()

因此,您将被自动带到 Google.

链接文本 Selenium–By.LinkText()

完成部分链接文本 Selenium – By.partialLinkText()

使用链接文本的一部分来访问链接是使用 通过.partialLinkText() 方法。如果您指定具有多个匹配项的部分链接文本,则只会访问第一个匹配项。请考虑下面的 HTML 代码。

部分链接文本 Selenium – By.partialLinkText()

 部分链接文本 Selenium – By.partialLinkText()

执行以下 WebDriver 代码后,您仍然会被带到 Google.

 部分链接文本 Selenium – By.partialLinkText()

代码:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class P1 {

    public static void main(String[] args) {
        String baseUrl = "https://demo.guru99.com/test/accessing-link.html";
        System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();

        driver.get(baseUrl);
        driver.findElement(By.partialLinkText("here")).click();
        System.out.println("Title of page is: " + driver.getTitle());
        driver.quit();
    }
}

部分链接文本 Selenium – By.partialLinkText()

如何获取具有相同链接文本的多个链接

那么,如何解决上述问题呢?如果有多个链接具有相同的链接文本,并且我们想访问除第一个链接之外的其他链接,我们该怎么做呢?

在这种情况下,通常使用不同的定位器,即...By.xpath()、By.cssSelector() 或 By.tagName()。

最常用的是 By.xpath()。它是最可靠的,但它看起来很复杂且不可读。

链接文本区分大小写

链接文本区分大小写

参数为 通过.linkText()通过.partialLinkText() 都是区分大小写的,也就是说,大小写很重要。例如, Mercury Tours 的主页上,有两个链接包含文本“egis” - 一个是位于顶部菜单的“注册”链接,另一个是位于页面右下角的“在此注册”链接。

链接文本区分大小写

虽然两个链接都包含字符序列“egis”,但“By.partialLinkText()”方法会根据字符的大小写分别访问这两个链接。请参见下面的示例代码。

链接文本区分大小写

Code

public static void main(String[] args) {
        String baseUrl = "https://demo.guru99.com/test/newtours/";
        System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();

        driver.get(baseUrl);
        String theLinkText = driver.findElement(By
                .partialLinkText("egis"))
                .getText();
        System.out.println(theLinkText);
        theLinkText = driver.findElement(By
                .partialLinkText("EGIS"))
                .getText();
        System.out.println(theLinkText);

        driver.quit();

    }

区块内外的链接

最新的 HTML5 标准允许将标签放置在块级标签(如、 或 )的内部和外部。“By.linkText()”和“By.partialLinkText()”方法可以访问位于这些块级元素外部和内部的链接。请考虑下面的 HTML 代码。

区块内外的链接

区块内外的链接

下面的 WebDriver 代码使用 By.partialLinkText() 方法访问这两个链接。

区块内外的链接

代码:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class MyClass {

    public static void main(String[] args) {
        String baseUrl = "https://demo.guru99.com/test/block.html";
        System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();

        driver.get(baseUrl);
        driver.findElement(By.partialLinkText("Inside")).click();
        System.out.println(driver.getTitle());
        driver.navigate().back();
        driver.findElement(By.partialLinkText("Outside")).click();
        System.out.println(driver.getTitle());
        driver.quit();
    }
}

上面的输出确认两个链接都已成功访问,因为它们各自的页面标题都已正确检索。

常见问题

`By.linkText()` 匹配链接的完整可见文本,而 `By.partialLinkText()` 匹配包含给定子字符串的任何链接。当有多个链接符合条件时,两者都只返回第一个匹配的链接。

是的。By.linkText() 和 By.partialLinkText() 都区分大小写,所以大小写很重要。文本“egis”和“EGIS”会被视为不同的值,并且可能匹配同一页面上的不同链接。

因为链接文本定位器只返回第一个匹配项,所以可以使用 By.xpath() 或 By.cssSelector() 来定位特定链接,或者使用 findElements() 和 By.tagName(“a”) 来收集所有链接并选择你需要的链接。

AI 工具会分析 DOM 并根据稳定性对属性进行排序,从而推荐稳健的 XPath 或 CSS 选择器。它们倾向于使用唯一且不易失效的标识符,以减少测试执行期间因 UI 细微变化而导致的失败。

是的。自愈测试框架利用人工智能来检测定位器何时失效,然后根据相似度对附近元素进行评分,并自动切换到最接近的匹配项,从而保持定位器的可靠性。ping 测试运行所需人工维护较少。

总结一下这篇文章: