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();

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

7 ответов


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

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

я использовал 3-й способ с успехом все время.

еще один

  1. Do а .SendKeys(Keys.Enter) на этом элементе (или клавише пробела)

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

так После много читая и тестируя, я обнаружил, что мой решение is просто свиток к 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)", "");

или

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

или

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

другие темы полезные ресурсы здесь.

обновление

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

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

element.sendKeys(Keys.TAB);

или

element.sendKeys("\t")

или

Actions builder = new Actions(driver);
builder.keyDown(Keys.TAB).perform()

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

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

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


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

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


для меня это было создание этой команды.

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

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


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

TheNotClickableField.Функцию Sendkeys(Ключи.Управление + "-" + "-");

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


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

(драйвер как IJavaScriptExecutor).ExecuteJavaScript (окно".scrollTo (0,document.тело.scrollHeight - 150)");

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

новый Действия (Водитель).Функцию Sendkeys(Ключи.Конец.)Perform ();

ключи.Конец можно переключить с помощью клавиш.PageDown / / Ключи.Космос!--3-->

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

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

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

3.Щелкните элемент - - -> elementToClick.нажмите кнопку();