Я пытаюсь протестировать сложный интерфейс javascript с Selenium (используя интерфейс Python и через несколько браузеров). У меня есть несколько кнопок формы:
<div>My Button</div>
Я хотел бы иметь возможность поиска кнопок на основе «Моя кнопка» (или не учитывающих регистр, частичных совпадений, таких как «моя кнопка» или «кнопка»)
Я нахожу это удивительно трудным, до такой степени, что я чувствую, что упускаю что-то очевидное. Лучшее, что у меня есть, это:
driver.find_elements_by_xpath('//div[contains(text(), "' + text + '")]')
Это чувствительно к регистру, однако. Другая вещь, которую я пробовал, - это перебирать все элементы div на странице и проверять свойство element.text. Тем не менее, каждый раз, когда вы получаете ситуацию в форме:
<div class="outer"><div class="inner">My Button</div></div>
У div.outer также есть «Моя кнопка» в качестве текста. Чтобы исправить это, я попытался выяснить, является ли div.outer родителем div.inner, но не смог понять, как это сделать (element.get_element_by_xpath ('..') возвращает родителя элемента, но это тесты не равны div.outer). Кроме того, итерация по всем элементам на странице кажется очень медленной, по крайней мере с использованием веб-драйвера Chrome.
Идеи?
Изменить: этот вопрос вышел немного расплывчатым. Спросил (и ответил) более конкретную версию здесь: Как получить текст элемента в Selenium WebDriver (через API Python) без включения текста дочернего элемента?