Как найти элемент, содержащий определенный текст в Selenium Webdriver (Python)?



Answers

вы можете попробовать xpath как:

'//div[contains(text(), "{0}") and @class="inner"]'.format(text)
Question

Я пытаюсь проверить сложный интерфейс javascript с Selenium (используя интерфейс Python и несколько браузеров). У меня есть несколько кнопок формы:

<div>My Button</div>

Я хотел бы иметь возможность искать кнопки на основе «Моя кнопка» (или не учитывающие регистр, частичные совпадения, такие как «моя кнопка» или «кнопка»)

Я нахожу это удивительно трудным, насколько мне кажется, что я пропускаю что-то очевидное. Самое лучшее, что у меня есть до сих пор:

driver.find_elements_by_xpath('//div[contains(text(), "' + text + '")]')

Однако это чувствительно к регистру. Другая вещь, которую я пробовал, - это повторение всех разделов на странице и проверка свойства element.text. Однако каждый раз, когда вы получаете ситуацию в форме:

<div class="outer"><div class="inner">My Button</div></div>

div.outer также имеет «Моя кнопка» в качестве текста. Чтобы исправить THAT, я попытался посмотреть, является ли div.outer родителем div.inner, но не мог понять, как это сделать (element.get_element_by_xpath ('..') возвращает родительский элемент, но он тесты не равны div.outer). Кроме того, повторение всех элементов на странице кажется очень медленным, по крайней мере, с помощью веб-браузера Chrome.

Идеи?

Edit: Этот вопрос вышел немного расплывчато. Спросил (и ответил) более конкретную версию здесь: Как получить текст элемента в Selenium WebDriver (через Python api) без включения текста дочернего элемента?




wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[contains(text(), 'YourTextHere')]")));
    assertNotNull(driver.findElement(By.xpath("//*[contains(text(), 'YourTextHere')]")));
    String yourButtonName=driver.findElement(By.xpath("//*[contains(text(), 'YourTextHere')]")).getAttribute("innerText");
    assertTrue(yourButtonName.equalsIgnoreCase("YourTextHere"));



Links