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 правильный. Вот несколько выходов:
- скачать .
- попробовать .
Submit()
вместо.Click()
- попробуйте выполнить
JavaScript
это будет выполнено наOnClick
событие элемента, который вы пытаетесь щелкнуть.
я использовал 3-й способ с успехом все время.
еще один
- 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.нажмите кнопку();