Как передать подстановочный знак для XPath для использования Selenium (c #) - PullRequest
0 голосов
/ 30 мая 2019

Я хочу найти элементы с XPath для моего веб-драйвера Selenium (C #), который перебирает различные номера счетов в угловых строках. Чтобы узнать количество присутствующих строк, я хочу получить количество, передавая подстановочный знак для xpath, заменяя часть, в которой передается номер счета. Однако, не могу заставить это работать

Xpath как показано ниже:

//*[@id="mr-name-1234568"]
//*[@id="mr-name-7895874"]

, где AccountNumber = 1234568 & 7895874 (и может отличаться)

Я пробовал, как показано ниже, но селен не распознает это -

var rows = driver.FindElements(By.XPath("//*[@id='mr-name-*']"));
int Rows = rows.Count();

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

1 Ответ

1 голос
/ 30 мая 2019

Использование начинается с в вашем случае OP.

Вот xpath, который вы можете использовать.

var rows = driver.FindElements(By.XPath("//*[starts-with(@id,'mr-name-')]"));

Вы должны использовать starts-with вэтот сценарий в качестве первой части id соответствует.Ниже приведены общие обозначения

 //tag[starts-with(@attribute,'first_static_part_in_attribute_value')] 

, оканчивающиеся на? Что делать, если динамическое содержимое находится в начале значения атрибута.

ends-with - это опция в xpath 2.0, но большинство распространенных браузеров, таких как Chrome, Firefox, поддерживают xpath 1.0.Таким образом, мы должны обойти все вокруг, чтобы достичь результата, похожего на результат, используя string-length, substring и =.Ниже приведен пример.

Пример HTML:

<html>
   <body>
		<button id="mr-name-7895874">Dynamic content at the end 1</button>
		<button id="7895234-mr-name">Dynamic content at the start 1</button>
		<button id="104-mr-name">Dynamic content at the start 2</button>
		<button id="789523499-mr-name">Dynamic content at the start 3</button>
		<button id="mr-name-74">Dynamic content at the end 2</button>
   </body>
</html>

Теперь у вас есть 3 кнопки с динамическим номером в начальной позиции, но статический текст -mr-name находится в конце.Таким образом, мы должны найти 3 кнопки, где id оканчивается на '-mr-name` .

Xpath 1.0: аналогично заканчивается в xpath 2.0

//*[substring(@id, string-length(@id) - string-length('-mr-name') +1) = '-mr-name']

Посмотрим, как это работает.Для понимания цели рассмотрим 104-mr-name в качестве значения идентификатора.

  • string-length (@id): Здесь будет определена длина значения атрибута id (11 символов).
  • string-length ('- mr-name'): Здесь будет найдена длина строки, которую мы проверяем (8 символов).
  • substring (@ id, начальная_позиция): Здесь начальная позиция равна (11-8) + 1 = 4 (мы добавляем 1, чтобы не пропустить первый символ -).
  • Последний шаг - сравнить обе подстроки с ожидаемой статической строкой (здесь -mr-nameявляется статической строкой) с использованием =.

Снимок экрана:

enter image description here

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