Selenium + Python + Unittest: сообщение об ошибке при выполнении теста «Другой элемент получил бы щелчок» - PullRequest
4 голосов
/ 24 февраля 2020

Подробности: В моем текущем проекте я пишу контрольные примеры о Python и Selenium в Magento. При этом я запрашиваю поверхность слайда (кнопку).

Запрос:

def test_pagebuilder_slide_button_pagebuilder_button_primary(self):
        driver = self.driver
        driver.get("my_webseite.de")
        time.sleep(15)
        try: driver.find_element_by_id("slick-slide-control01").click()
        except AssertionError as e: self.verificationErrors.append(str(e)) 
        time.sleep(15)

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

Сообщение об ошибке:

selenium.common.exceptions.WebDriverException: Message: unknown error: Element <button type="button" role="tab" id="slick-slide-control01" aria-controls="slick-slide01" aria-label="... of 2" tabindex="-1">2</button> is not clickable at point (517, 612). Other element would
receive the click: <div role="alertdialog" tabindex="-1" class="message global cookie" id="notice-cookie-block" style="">...</div>

Ты хоть представляешь, как мне этого избежать?

Ответы [ 3 ]

1 голос
/ 06 марта 2020

Стоит также рассмотреть другие скрипты, которые могут внедрять элементы на главной странице. Учитывая природу ошибки, это скорее похоже на один из тех плагинов, которые соответствуют требованиям GDPR, которые будут вызывать предупреждение у пользователя. Лучший вариант - отклонить его, как упомянуто Aayu sh, а затем go с вашим скриптом.

0 голосов
/ 24 февраля 2020

Обойдите это, используя javascript для выполнения клика:

browser.execute_script(document.getElementById("slick-slide-control01").click())
0 голосов
/ 24 февраля 2020

Одним из распространенных случаев этой ошибки является случай, когда элемент не виден на странице, как, например, вам может потребоваться прокрутка для доступа к этому элементу. Если это так, то ActionChains должен добиться цели:

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

WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, "slick-slide-control01")))
ActionChains(driver).move_to_element(driver.find_element_by_id("slick-slide-control01")).click().perform()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...