Selenium - Элемент не может быть нажат в точке

Я использую селен для теста script. Я получаю следующую ошибку, и эта ошибка возникает случайно. Когда я бегу 10 раз, я получаю это примерно дважды. Так что это не совсем воспроизводимо. Кто-нибудь знает, почему это происходит? элемент, который я пытаюсь щелкнуть, определенно отображается в браузере и не перемещается, поэтому нет необходимости изменять размер или перетаскивать элемент. Я использую хром-webdriver, и я читаю другие стратегии устранения неполадок (Отладка "Элемент не кликается в точке" ошибка), и они не кажутся релевантными моей проблеме. Я тоже долго ждал.

UnknownError: unknown error: Element is not clickable at point (167, 403). Other element would receive the click: <div class="leftMasterBackground"></div>

Ответ 1

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

  • Явно ждет его присутствие в DOM
  • Прокрутите в представление элемента
  • Убедитесь, что clickable

Помогло ли это стабильности?

WebDriverWait wait = new WebDriverWait(driver, 3)
JavascriptExecutor js = ((JavascriptExecutor) driver)

//presence in DOM
wait.until(ExpectedConditions.presenceOfElement(By.id("ID")));

//scrolling
WebElement element = driver.findElement(By.id("ID")));  
js.executeScript("arguments[0].scrollIntoView(true);", element);

//clickable
wait.until(ExpectedConditions.elementToBeClickable(By.id("ID")));

Кроме того, если вы решите переопределить интерфейс Actions с более индивидуальным, вы можете использовать два типа кликов ( например): click(), который будет иметь все эти этапы стабильности и fastClick(), который будет по умолчанию щелчком без каких-либо изменений.

Ответ 2

Я решил, поймав исключение и управляя им следующим образом:

        WebDriver driver = new ChromeDriver();
        WebElement element = driver.findElement(By.id("ID"));
        boolean clicked = false;
        do{
            try {
                element.click();
            } catch (WebDriverException e) {
                continue;
            } finally {
                clicked = true;
            }
        } while (!clicked);

Ответ 3

У меня также была проблема с Chrome. Я решил, что ставя одну строку кода, прежде чем нажимать на элемент:

scrollToViewElement(driver,xpath);

Ответ 4

щелкните родительский элемент элемента, который вы хотите щелкнуть. это может быть только обходным решением.

Ответ 5

  • Это происходит только на Chrome, так что работает на ie и firefox
  • ChromeDriver всегда щелкает середину элемента
  • Причина, по которой драйвер Chrome не вычисляет правильное расположение ссылки на экране.

Решение:

// Find an element and define it

WebElement elementToClick = driver.findElement(By.xpath("some xpath"));
// Scroll the browser to the element Y position
((JavascriptExecutor) driver).executeScript("window.scrollTo(0,"+elementToClick.getLocation().y+")");
// Click the element
elementToClick.click();

Ответ 6

У меня такая же проблема из-за того, что один из счетчиков скрывал элемент.

Я дал xpath, и он решил проблему. Другие люди предложили 1. прокрутить 2. сон тоже работал для них.

Ответ 7

для лучшего решения используйте java-скрипт для фокусировки элемента Использование → JavascriptExecutor jsnew = (JavascriptExecutor) драйвер;             Элемент WebElement = driver.findElement(By.xpath(""));             jsnew.executeScript("arguments [0].scrollIntoView({block: \" center\"});", element);

Вместо xpath вы можете использовать id, css selector:  Этот scrollIntoView перенесет этот конкретный элемент в середину страницы, и драйвер сможет поразить элемент.

если это нормальная кнопка или ссылка, использование jsnew.executeScript( "Аргументы [0].click();", элемент);

Это последовательное решение для клика.