WebDriver - элемент не кликабельный Chrome

У меня следующая проблема. Я провожу тест в Firefox и Chrome. В Firefox тест выполняется правильно, но в Chrome SauceLabs выдает сообщение:

unknown error: Element is not clickable at point (717, 657). Other
element would receive the click: <div class="col-md-9 col-sm-12"
style="margin-top:8px;">...</div> (Session info: chrome=36.0.1985.125)
(Driver info: chromedriver=2.10.267521,platform=Windows NT 6.3 x86_64)

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

driver.FindElement(By.CssSelector("button.btn-xs:nth-child(1)")).Click();

Есть идеи, что здесь не так?


person Sowiarz    schedule 19.09.2014    source источник
comment
вы пытались дождаться элемента до щелчка?   -  person German Petrov    schedule 19.09.2014
comment
такое же поведение после тайм-аута.   -  person Sowiarz    schedule 19.09.2014


Ответы (8)


Я предполагаю, что у вас есть правильный элемент, который вам нужен, т. Е. Правильный XPath. Вот несколько выходов:

  1. Попробуйте вместо этого нажать parent element.
  2. Попробуйте .Submit() вместо .Click()
  3. Попробуйте выполнить JavaScript, который будет выполнен в событии OnClick элемента, который вы пытаетесь щелкнуть.

Я все время успешно использовал третий способ.

Еще один

  1. Сделайте .SendKeys(Keys.Enter) на этом элементе (или клавишу пробела)
person bit    schedule 19.09.2014
comment
1. не работает 2. не работает: нет такого элемента: элемента не было в форме, поэтому не удалось отправить. - person Sowiarz; 19.09.2014
comment
Вы уверены, что элемент существует в форме, поскольку к 2 вы получили это сообщение? В любом случае попробуйте 3 - person bit; 19.09.2014

Поскольку вы тоже пометили вопрос как Google-Chrome - я полагаю, что это в основном происходит с ChromeDriver. У меня были такие же проблемы с одним из моих предыдущих проектов (Asp .Net MVC). Я обнаружил, что когда некоторые элементы не видны для этого драйвера, если они не находятся в screen_visible_area. Пожалуйста, обратите внимание, что они загружаются (HTML, CSS3, JS и т. Д.) Правильно.

Итак, после долгого чтения и тестирования я обнаружил, что мой обходной путь - это просто прокрутить до WebElement, поэтому он находится в видимой части экран. На самом деле эта проблема касалась не всех элементов, и лучшего решения я не нашел.

unknown error: Element is not clickable at point (..., ...) 

Не является описательной ошибкой в ​​данном случае, потому что, как и вы, я тоже думал, что это связано с селектором.

Чтобы быть полным ответом - у меня были те же проблемы с IEDriver. Моя реализация заключалась в использовании опций прокрутки вниз / вверх в браузере и просто «отправить экран» туда, где находится проблемный элемент.

Простой код JSExecutor, который вы можете использовать:

WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(110,350)", "");

or

jse.executeScript("scroll(0, 250);");

or

driver.executeScript("window.scrollBy(110,350)", "");

Другие тематические полезные ресурсы находятся здесь.

Обновить

Что касается .sendKeys(), я также использовал специальные возможности браузера. Все, что вам нужно сделать, это просто подсчитать, сколько щелчков по TAB нужно вашему тесту, чтобы перейти к целевому web_element. Тогда просто позвоните .click().

Попробуйте этот простой код:

element.sendKeys(Keys.TAB);

or

element.sendKeys("\t")

or

Actions builder = new Actions(driver);
builder.keyDown(Keys.TAB).perform()
person ekostadinov    schedule 19.09.2014
comment
Окей, это полезный ответ, я проверю, может быть, в будущих тестах;) Спасибо! - person Sowiarz; 19.09.2014
comment
Будет быстрее выполнить .SendKeys () напрямую, чем прокручивать вниз до элемента и выполнять на нем .Click () - person bit; 19.09.2014
comment
На самом деле это было одно из моих индивидуальных решений - см. Мой обновленный ответ. - person ekostadinov; 19.09.2014
comment
Пробовал все: прокрутку, колесо прокрутки и т.д. Единственное, что работает, это Keyboard.SendKeys ({TAB}); (столько раз, сколько нужно, чтобы элемент управления отображался на экране.) Нелепо! - person starmandeluxe; 18.10.2017
comment
Я знаю :) ты пробовал необработанный JS с IJavascriptExecutor.ExecuteScript("click-elem-here"); - person ekostadinov; 18.10.2017

Я понимаю, что это очень старый вопрос, но он возник при поиске почти идентичной проблемы в наши дни. Попробовав многие из описанных здесь исправлений и получив новые исключения для моей проблемы (в основном устаревший элемент и таймауты HTTP-запроса), я наткнулся на этот выпуск на GitHub Selenium.

Как описано в сообщении, Chrome превзошел возможности моей версии chromedriver.exe - у моего драйвера v2.30 были известные проблемы с щелчком по элементам из-за изменений в механике прокрутки Chrome v61. Обновление до последней версии chromedriver.exe решило все мои проблемы.

tl / dr: убедитесь, что ваша версия chromedriver совместима с тестируемой версией Chrome.

person jdmac020    schedule 02.11.2017

У меня возникла проблема с тем, что кнопка входа в систему не нажимается в Chrome, даже если xpath был правильным. после просмотра многих сайтов я пришел к решению - использовать .submit () вместо .click (), и он работал отлично.

driver.findElement(By.xpath("//button[@id='loginBtn']")).click();
driver.findElement(By.xpath("//button[@id='loginBtn']")).submit();
person mgupta    schedule 16.05.2019

Если вы делаете что-то сложное в своем CSS, Chrome может запутаться (это случилось со мной) и подумать, что элемент, который вы пытаетесь щелкнуть, покрыт другим элементом, хотя это не так.

Один из способов решить эту проблему - помочь Chrome правильно понять ситуацию, добавив z-индексы (вам также потребуется добавить относительное или абсолютное позиционирование), чтобы однозначно разместить правильный элемент поверх другого.

person Anonymous    schedule 02.02.2016

Для меня вместо этого он создавал эту команду.

driver.FindElementByXPath("id('gender1')").SendKeys(Keys.Space);

В моем случае я взаимодействовал с радиоуправлением.

person jbooker    schedule 06.04.2016

У меня была эта проблема на FF. Эта проблема возникает, когда ваше поле не находится в области просмотра. Удобный способ решить эту проблему - уменьшить масштаб вашего браузера:

TheNotClickableField.SendKeys (Keys.Control + «-» + «-»);

возможно, вы захотите уменьшить масштаб более или менее в зависимости от размера вашей страницы.

person Zaher    schedule 21.04.2016

I. Если кнопка находится внизу страницы, следующий код может быть использован для перехода вниз через JavaScript, откуда может быть выполнен щелчок:

(драйвер как IJavaScriptExecutor) .ExecuteJavaScript ("window.scrollTo (0, document.body.scrollHeight - 150)");

То же действие может быть выполнено через C # с классом Actions, предоставленным Selenium. Это приведет вас к нижней части страницы ----->

новые Действия (Драйвер) .SendKeys (Keys.End) .Perform ();

Keys.End можно переключать с помощью Keys.PageDown // Keys.Space

II. Если вы хотите определить точное положение элемента, вы можете:

1.Получите расположение элемента по Y ---> var elementToClick = driver.findElement (By. {Anything} (""));

2. Выполните следующий JS ---> (драйвер как IJavaScriptExecutor) .ExecuteScript (string.Format ("window.scrollTo (0, {0})", elementToClickYLocation.Location.Y));

3.Щелкните элемент ---> elementToClick.click ();

person Valentin Rangelov    schedule 25.08.2017