Поиск элементов на странице не имеющих «class» и «id», но содержащих текст С# , Selenium

151
24 декабря 2019, 09:40

Имеется 5 элементов на вебстранице содержащих разный текст: 1,7,13,25,4.
Пример: 13

Как Я могу найти только содержащий "13", объявить его и далее продолжить работать только с ним?

Answer 1

Используйте xPath с поиском по текстовому полю:

Строго "13" будет выглядеть так:

//*[text()="13"]

Любая строка содержащая "13" (частичное совпадение) так:

//*[text()[contains(.,"13")]]

Что написано в этих xPath:

* - выберет все теги (элементы) в xml (html) разметке

[text()="13"] - из выбранных элементов будет искать те, у которых текстовое поле равно строго "13"

[text()[contains(.,"13")]] - сначала выберет все элементы с текстовым полем, то есть сначала применит функцию text(), а потом из всех элементов с текстовым полем будет искать те, в которых содержится строка "13" [contains(.,"13")]. Точка . в (.,"13") означает, что в элементах будут "смотреться" все текстовые элементы (их может быть несколько на один элемент (тег)).

UPD Согласно коду из скриншота, div под номером 1 можно идентифицировать вот так:

//div[@style="overflow: visible;" and .//*[text()="209"]]

Здесь @style="overflow: visible;" используется для того, что-бы явно указать на один из трёх div'ов, а не выбирать все div'ы дочерним элементом которых будет текст "209".

Потом логический оператор and.

И в конце условие, что тот div у которого @style="overflow: visible;" должен иметь где-то там внизу элемент с текстом "209"

UDP2 На счёт подстановки значения в строку. Я пишу на Python 3, поэтому синтаксис в примерах будет отличаться от вашего в C#.

Есть 2 варианта:

  1. Конкатенация строк. Вы формируете строку xPath адреса из трёх частей.
one = '//div[@style="overflow: visible;" and .//*[text()="'
two = 209
three = '"]]'
xpath = one + str(two) + three

Вы меняете только вторую часть строки и складываете три строки:

Причём str(two) - это приведение типа int (целого числа 11) в тип str (строки вида "11"). В C# приведение в строку по моему делается с помощью .ToString().

  1. Это использование функции для редактирования строк. В Python 3 такой функцией является .format(), погуглите подобную функицю для C#. Логика такой функции заключается в том, что вы в готовой строке специальным символом фигурных скобок {} отмечаете место вставки нужного вам значения.
xpath = '//div[@style="overflow: visible;" and .//*[text()="{}"]]'
xpath.format(11)

UPD3

Что-бы к адресу //div[@style='overflow: visible;' and .//span[text()='209' ]] добавить уточнение самого span вам нужно не просто вставить and с новым требованием, а вставить их в нужное место. И давай-те разберёмся куда)) По смыслу xPath - //div[@style='overflow: visible;' and .//span[text()='209' ]] можно разделить на три части:

1-я часть та, которая указывает на то, какой элемент нам нужно найти - //div. Мы ищем div элемент. Но мы же ищем не все div элементы а конкретный, поэтому добавим к div'у условие, по которому мы его будем искать - //div[]. Добавились квадратные скобки, которые значат, что мы хотим искать div по условию внутри этих скобок.

Итог 1-й части - //div[]

2-я часть. Мы знаем что одно из условий это - @style="overflow: visible;", но сейчас назовём его условие1. И тогда, так будет выглядеть код - //div[условие1]. Но мы же выяснили, что нам так же требуется и ещё одно условие - .//span[text()="209"] - назовём условие2. И кончено же мы знаем что оператор and соединяет наши условия. Получается так - //div[условие1 and условие2]. Но, во втором условии тоже есть скобки квадратные что с ними то? А это как раз 3-я часть)

Итог 2-й части - //div[условие1 and условие2]

3-я часть. Во втором условии есть квадратные скобки, в котором и находится условие относительно текстового поля у элемента span. То есть, если нам нужны условия относительно span элемента, то нам нужны именно эти скобки. То есть на самом деле, условие с .//span[text()="209"] выглядит не как условие2, а как условие2[условие3]. То есть наш конечный xPath выглядит так - //div[условие1 and условие2[условие3]]. И тут наконец наступает кульминация, и мы с вами начинаем понимать, в какие скобки нам нужно вставить дополнительное условие к элементу span - //div[условие1 and условие2[условие3 and условие4]].

И конечно же, наш итоговый xPath будет выглядеть так:

//div[@style='overflow: visible;' and .//span[text()='209' and @class='cool']]
READ ALSO
C# вопрос по ООП

C# вопрос по ООП

Задумался как сделать логичнее (правильнее)Есть два класса: один ставит лайки в нём два метода лайки по тэгу и лайки по геолокации, второй...

129
Как добавить MouseEventHandler к PictureBox?

Как добавить MouseEventHandler к PictureBox?

Собственно есть такой код, где в цикле создаются PictureBox

145
Обобщения оператор where

Обобщения оператор where

Подскажите как загуглить что бы почитать о операторе/ключевом слове where в такой конструкции например:

145
Как подсчитать сумму ячеек в строке dataGridView C#

Как подсчитать сумму ячеек в строке dataGridView C#

Нужно подсчитать сумму ячеек для каждой строки таблицы dataGridViewКол-во строк и столбцов заранее не известно

130