У меня есть ссылка на моей веб-странице. В зависимости от длины ссылки, она будет отображаться в одной или нескольких строках. Как прочитать ссылку, используя селен - PullRequest
0 голосов
/ 01 октября 2019

У меня есть ссылка на учетную запись на моей веб-странице. В зависимости от длины ссылки она будет отображаться как однострочная или многострочная. Как определить ссылку, когда она отображается в несколько строк с помощью селена.

ex: ' ST WF SETUP_AWS_USB_APPLICATION_12345 ' это имя ссылки отображается как однострочная ссылка

Если я изменяю имя учетной записи на ' ST WF SETUP_AWS_USB_APPLICATION_SETUP_AW ', ссылка отображается как двухстрочная ссылка. как показано ниже -

' ST WF SETUP_AWS_USB_APPLICATION_ SETUP_AWS_USB_123456 '

Поскольку ссылка разделена на 2 строки, я вижу тег
в имени ссылки и не могуидентифицировать используя "By.linkname"

Я хочу иметь уникальный код для идентификации ссылки независимо от количества строк, на которые она разделена с использованием Selenium

Ответы [ 3 ]

1 голос
/ 01 октября 2019

Для этого может потребоваться написать упакованный селектор, который оценивает состояние ссылки и определяет, какой селектор использовать. Вам нужно будет реализовать быстрый способ определить, сколько строк занимает ссылка.

Для нескольких элементов ссылок вы не сможете найти непосредственно по имени, так как оно разделено, и у нас нет способа определить, какой текст и где разделен. Но мы можем написать 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 для их поиска.

0 голосов
/ 07 октября 2019

спасибо за ответ. Я испробовал оба способа использования Xpath и xpath, но поскольку исходный код содержит тег
, он не работает.

Поэтому я беру подмножество моей строки и проверяю с использованием частичного текста ссылки, и он работал для несколькихнабор данных.

0 голосов
/ 02 октября 2019

Независимо от того, что текст ссылки ST WF SETUP_AWS_USB_APPLICATION_12345 находится в одном из форматов:

  • одна строка
  • двалинии

Вы можете использовать любую из следующих Стратегий локатора :

  • partalLinkText :

    By.partialLinkText("SETUP_AWS_USB_APPLICATION_SETUP_AWS_USB_123456")
    
  • xpath :

    By.xpath("//a[contains(.,'SETUP_AWS_USB_APPLICATION_SETUP_AWS_USB_123456')]")
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...