0

我的网页中有一个帐户链接。根据链接的长度,它将显示为单线链接或多线链接。如何在使用 selenium 以多行显示链接时识别链接。

例如:“ ST WF SETUP_AWS_USB_APPLICATION_12345 ”此链接名称显示为单行链接

如果我将帐户名称更改为“ ST WF SETUP_AWS_USB_APPLICATION_SETUP_AWS_USB_123456 ”,则链接显示为 2 行链接。像下面 -

' ST WF SETUP_AWS_USB_APPLICATION_SETUP_AWS_USB_123456 '

由于链接分为 2 行,我可以
在链接名称中看到标签,并且无法使用“ By.linkname”进行识别

我想要一个唯一的代码来识别链接,而不管它使用 Selenium 分成的行数

4

3 回答 3

1

您可能需要为此编写一个包装的选择器,以评估链接状态并确定要使用的选择器。您将需要实施一种快速方法来检测链接占用了多少行。

对于多个链接元素,您将无法直接通过名称找到,因为它是拆分的,我们无法确定哪些文本在哪里拆分。但是我们可以为链接元素编写一个 XPath,以便在不使用链接文本的情况下找到它们。

如果您为正在使用的页面发布更多 HTML,我可以编写更好的 XPath 来帮助获取链接。

public static bool ElementExists(this IWebDriver driver, By by)
{
    return driver.FindElements(by).Count > 0;
}

// get 1 or multi-line link elements
public IWebElement GetLinkElements(string accountName)
{
    // case: single-line link
    if (driver.ElementExists(By.XPath("$//a[text()='{accountName}']")))
    {
        return driver.FindElement(By.XPath("$//a[text()='{accountName}']"));
    }

    // case: multi-line link, use FindElements for multiple
    else {
        return driver.FindElementsBy.XPath("//a"); // this should be more specific
    }
}

这是一个通用示例,但如果您为链接周围页面的其余部分包含一些 HTML,我们可以尝试编写更好的 XPath 来查找它们。

于 2019-10-01T14:58:02.513 回答
0

感谢您的答复。我尝试了两种使用 Xpath 和 xpath contains 的方式,但是由于源代码包含
标签,它可以工作。

因此,我正在获取我的字符串的子集并使用部分链接文本进行验证,它适用于多组数据。

于 2019-10-07T12:44:15.200 回答
0

无论链接文本 ST WF SETUP_AWS_USB_APPLICATION_12345采用任何一种格式:

  • 单线
  • 两条线

您可以使用以下任一定位器策略

  • 部分链接文本

    By.partialLinkText("SETUP_AWS_USB_APPLICATION_SETUP_AWS_USB_123456")
    
  • 路径

    By.xpath("//a[contains(.,'SETUP_AWS_USB_APPLICATION_SETUP_AWS_USB_123456')]")
    
于 2019-10-01T22:20:59.963 回答