Selenium WebDriverWait с ожидаемыми условиями возвращает только первый найденный элемент (Python) - PullRequest
1 голос
/ 01 октября 2019

У меня есть следующие элементы HTML:

1)

<span class="input-group-btn">
        <button type="submit" class="btn btn-default" data-qa- 
id="main- 
go-button">Go</button>
      </span>

2)

<span class="input-group-btn" style="float: left;"><button type="button" 
wkda-autocomplete-update="update" class=" btn btn-default" data-qa- 
id="">Change</button></span>

3)

<span class="input-group-btn"><button type="button" wkda-autocomplete- 
update="update" class=" btn btn-default" data-qa-id="">Change</button></span>

поиск искомого элемента:

browser.find_elements_by_class_name("input-group-btn")

возвращает список из трех элементов, поскольку есть три html-части с одинаковой структурой:

[<selenium.webdriver.remote.webelement.WebElement 
(session="1fc51e63b34c7acfa37e3930c86fc46c", element="6bab5131-a508-41da- 
a7b7-1ccaae8dabda")>,
<selenium.webdriver.remote.webelement.WebElement 
(session="1fc51e63b34c7acfa37e3930c86fc46c", element="26dfeaa3-d54c-4652- 
a84e-aae47d0574ba")>,
<selenium.webdriver.remote.webelement.WebElement 
(session="1fc51e63b34c7acfa37e3930c86fc46c", element="7bb98d81-a576-41fd- 
be70-2aa2564f76b9")>]

Я хочу выбрать и щелкнуть толькоТретий элемент этого списка, поэтому я делаю:

browser.find_elements_by_class_name("input-group-btn")[2].text

, и он отлично работает.

Хотелось бы найти этот элемент через WebDriverWait. Но когда я запускаю это:

WebDriverWait(browser, 10).until(EC.visibility_of_element_located((By.CLASS_NAME, "input-group-btn")))

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

Знаете ли вы, есть ли способ захватить третий элемент вместо первого найденного?

Ответы [ 2 ]

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

Чтобы нажать на кнопку последнего изменения. Включите WebdriverWait и следуйте XPATH.

WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH,"(//span[@class='input-group-btn']/button[text()='Change'])[last()]"))).click()
0 голосов
/ 01 октября 2019

Вам понадобится более конкретный селектор, чтобы найти ваш элемент. Поскольку с browser.find_elements_by_class_name("input-group-btn") найдено 3 элемента, вы должны написать более специфичный XPath-селектор. Вам не нужно ждать всех 3 - только для конкретной кнопки.

На основе предоставленного вами образца вы можете использовать XPath //button[text()='Change']:

WebDriverWait(browser, 10).until(EC.visibility_of_element_located((By.XPath, "//button[text()='Change']")))
browser.find_element_by_xpath("//button[text()='Change']").text

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

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