Как проверить, что соответствующий текст в веб-элементе частично заключен в тег <a>? - PullRequest
0 голосов
/ 02 октября 2019

У меня есть следующее:

This is my text string and this next <a href='https//somelink.org/'>part</a> is only partially enclosed in a tags.

В приведенной выше строке я должен искать «следующую часть», а не только «часть», поэтому, как только я найду «следующую часть», мне нужно проверить, есть лиесть ли какой-либо тег в сопоставленном тексте (иногда там нет тега) - как я могу это сделать?

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

Я пробовал это:

//*[contains(text(),"next part")]

Но ничего не находит, вероятно, потому что у меня там пробелы - как мне преодолеть это?

Заранее спасибо,

Ответы [ 2 ]

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

Давайте предположим, что этот html:

<p>This is my text string and this next <a href='https//somelink.org/'>part</a> is only partially enclosed in a tags.</p>

Мы можем выбрать с селеном:

p = driver.find_element_by_xpath('//p[contains(.,"next part")]')

И мы можем определить, частично ли он в теге с регулярным выражением (несмотря на Тони Пони)):

html = p.get_attribute('innerHTML')
partly_in_a = 'next part' in re.sub(r'</?a.*?>', '', html) and 'next part' not in html

Для этого не существует чистого решения xpath 1.0, и в целом ошибочно полагаться на xpath для подобных вещей.

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

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

//*[contains(text(), 'next') and a[contains(text(), 'part')]]

Это запросит любой элемент, содержащий текст next, а затем проверит, что этот элемент содержит вложенный элемент a. с текстом part.

Чтобы определить, действительно ли существует вложенный тег a, вам нужно написать метод для этого, который проверяет два разных XPath. Нет простого способа обойти это, кроме как оценить элементы и посмотреть, что там есть.

public bool DoesElementHaveNestedTag()
{
    // check for presence of locator with nested tag
    // if driver.findElements returns > 0, then nested tag locator exists
    if (driver.findElements(By.XPath("//*[contains(text(), 'next') and a[contains(text(), 'part')]]")).Count > 0) return true
    else return false
}

Вы можете изменить этот метод в соответствии со своими потребностями, но идея та же. Невозможно узнать, имеет ли WebElement вложенный тег или нет, если только вы не попытаетесь найти WebElement с использованием двух XPath: один проверяет наличие тега, а другой - нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...