Как нажать кнопку закрытия в модальном окне через Selenium и Python - PullRequest
0 голосов
/ 01 марта 2019

Невозможно нажать кнопку id="close в модальном окне.

Пробует все xpath, например:

//button[@data-dismiss='modal']
//button[@id='close'], //button[@type='button']
//button[contains(.,'Закрыть')]
//button[contains(@data-dismiss,'modal')]
//button[contains(@id,'close')]

Также пытается объединить xpath, но все еще не работает

Код:

<div id="idCardGroupChangeStatusResult" class="modal fade in" tabindex="-1" role="dialog" aria-hidden="false" style="display: block;">
<div class="modal-dialog st-modal-dialog" style="width: 600px; padding-top: 250px;">
<div class="modal-content">
<div class="modal-header st-pad-normal">
<div class="modal-body">
<div class="modal-footer">
<button id="close" class="btn btn-default btn-sm" type="button" data-dismiss="modal"> Закрыть </button>
</div>
</div>
</div>
</div>

Css не работает

1013 * Есть идеи?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Если element_to_be_clickable не работает, попробуйте код ниже, чтобы проверить, есть ли более одной кнопки закрытия на странице.Вы можете использовать приведенный ниже код для фильтрации по видимому или видимому и последнему и нажать на него.

close_buttons = WebDriverWait(driver, 5).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#idCardGroupChangeStatusResult #close")))
# check how many buttons in on the HTML, you can try "visibility_of_all_elements_located"
print(len(close_buttons))

visible_buttons = [close_button for close_button in close_buttons if close_button.is_displayed()]
visible_buttons_len = len(visible_buttons)
print(visible_buttons_len)

visible_buttons[visible_buttons_len - 1].click()

Исчезает ли сообщение?

Обновление, окно сообщения исчезает:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 5)
actions = ActionChains(driver)

#...

status_message = wait.until(
    EC.visibility_of_element_located((By.CSS_SELECTOR, "#idCardGroupChangeStatusResult")))

actions.move_to_element(status_message).perform()
# here you can get text from message window, check/assert ..
status_message.find_element_by_css_selector("#close").click()
0 голосов
/ 01 марта 2019

Поскольку элемент с текстом Закрыть находится внутри Модальное диалоговое окно , поэтому для поиска нужного элемента необходимо вызвать WebDriverWait для элемент должен быть кликабелен , и вы можете использовать любое из следующих решений:

  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.btn.btn-default.btn-sm#close[data-dismiss='modal']"))).click()
    
  • ИспользованиеXPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='btn btn-default btn-sm' and @id='close'][@data-dismiss='modal']"))).click()
    
  • Примечание : необходимо добавить следующие импортные данные:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
...