Отладка ошибки «Элемент не активен в точке»

397

Я вижу это только в Chrome.

Полное сообщение об ошибке гласит:

"org.openqa.selenium.WebDriverException: Элемент не активен в точке (411, 675). Другой элемент получит щелчок: ..."

Элемент, который «получит щелчок», находится сбоку от рассматриваемого элемента, не сверху и не перекрывая его, не перемещаясь по странице.

Я попытался добавить смещение, но это тоже не работает. Элемент находится в отображаемом окне без необходимости прокрутки.

user1591169
источник
2
Вы ждете загрузки страницы? Может быть, другой элемент перекрывает его во время загрузки страницы?
Herokiller
55
Короче говоря, для тех, кто только что прибыл - ЭЛЕМЕНТ НЕ ВИДИТСЯ НА СТРАНИЦУ И ПОЭТОМУ НЕ СЧИТАЕТСЯ. ВАМ НУЖНО ПРОКРУТИТЬ ПРОВЕРКУ, ВЫПУСКАЯ окно. ScrollTo.
Крис Б. Беренс
67
@ ChrisB.Behrens Это не всегда так. Эта конкретная ошибка также может быть дана, когда элемент покрыт другим. У меня было это исключение при попытке нажать кнопку, которая была другим элементом с фиксированным положением.
Мартин Кэссиди
4
Его не только Chromedriver - была такая же проблема с Firefox. Я исправил проблему, установив задержку для ожидания полной перезагрузки страницы, как предлагали другие выше.
codervince
5
Я думаю, что это абсолютно неправильный совет, чтобы выбрасывать scrollTo или ждать. Похоже, алгоритм щелчка селена таков: 1. вычислить позицию элемента 2. прокрутить до этой позиции (чтобы вам не нужно было ее выдавать) 3. щелкнуть мышью на эту позицию (исключение происходит из последнего утверждения, которое проверяет, какой элемент стоит на этом позиция непосредственно перед отправкой события клика) Мои советы: 1. проверьте, находится ли элемент в вашем окне просмотра. 2. проверьте, не покрыт ли элемент какими-либо другими (например, прикрепленными меню), скройте их, если они есть, или прокрутите вручную перед щелчком, не полагаясь на встроенную функцию scrollTo.
Виталик Верховодов

Ответы:

325

Это вызвано следующими 3 типами:

1. Элемент не виден для нажатия.

Используйте действия или JavascriptExecutor чтобы заставить его щелкнуть.

По действиям:

WebElement element = driver.findElement(By("element_path"));

Actions actions = new Actions(driver);

actions.moveToElement(element).click().perform();

Автор JavascriptExecutor:

JavascriptExecutor jse = (JavascriptExecutor)driver;

jse.executeScript("scroll(250, 0)"); // if the element is on top.

jse.executeScript("scroll(0, 250)"); // if the element is on bottom.

или

JavascriptExecutor jse = (JavascriptExecutor)driver;

jse.executeScript("arguments[0].scrollIntoView()", Webelement); 

Затем нажмите на элемент.

2. Страница обновляется, прежде чем нажать на элемент.

Для этого заставьте страницу подождать несколько секунд.

3. Элемент кликабелен, но поверх него есть спиннер / оверлей

Приведенный ниже код будет ждать, пока наложение не исчезнет

By loadingImage = By.id("loading image ID");

WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);

wait.until(ExpectedConditions.invisibilityOfElementLocated(loadingImage));

Затем нажмите на элемент.

Прабу Анантакришнан
источник
52
Существует третий тип причины, который заключается в том, что ваш элемент заключен в div или span. Страница может быть полностью загружена и полностью в области просмотра, но Chromedriver откажется щелкнуть по ней, где у веб-драйвера для FF и IE нет проблем. Настоящий человек не имеет ни малейшего представления о том, что диапазон существует, и браузеру все равно, когда вы на самом деле нажимаете на него, как на человека. Ни движение, ни ожидание не решат эту проблему; либо избегайте Chrome / chromedriver, либо переписывайте HTML-код страницы, как представляется, единственными вариантами для людей в случае 3.
Дон Симон
54
@ DonSimon У меня была та же проблема, что и у тебя. Я смог обойти это, используя .SendKeys (Keys.Return) вместо .Click. Это сработало для меня в Chrome, где у меня была эта проблема, и в Firefox, где у меня была другая похожая проблема с этой конкретной ссылкой (якорь, завернутый в Div).
Питер Бернье
17
Решение, предложенное @PeterBernier, хорошо работает в случае, когда элемент обернут в div или span. В Python я использовал .send_keys ('\ n'), чтобы смоделировать щелчок и обойти проблему в Chrome.
GJ
4
Если элемент скрыт элементом div, его исправляет следующий код. executeJavascript ("arguments [0] .click ();", selenium.findElement (locator));
EsotericNonsense
Вы также можете подождать, пока элемент станет кликабельным. wait.Until (ExpectedConditions.ElementToBeClickable (webElement));
Chielus
67

Вы также можете использовать JavaScript click, и тогда прокрутка не понадобится.

IJavaScriptExecutor ex = (IJavaScriptExecutor)Driver;
ex.ExecuteScript("arguments[0].click();", elementToClick);
Барт Войтала
источник
5
Невероятно! Интересно, почему селен не уничтожает предоставляемый ими метод click (), учитывая, что существуют условия, при которых isDisplayed () и isEnabled () недостаточно для щелчка по элементу, и это, кажется, единственное решение. Спасибо!
Джованни Битлинер
2
+1: это решение, которое сработало для меня. actions.MoveToElementу меня не получалось работать в C #, и другие решения с прокруткой казались немного хрупкими, потому что была вероятность, что прокрутка может неправильно отображать элемент, или положение элемента на странице может измениться.
Пользователь
1
Это решение является самым простым, если элемент не отображается, но существует на странице
Yashveer Rana
@Giovanni Bitliner Они не предоставляют этот метод, поскольку это не настоящий сценарий пользователя. Пользователи также должны ждать, пока загрузчик не исчезнет. Я думаю, что это удивительная вещь о селене.
Гидеон Малдер
+1 Тоже сработало у меня. Только что добавил в мой код метод flwg: `private void jsClick (элемент IWebElement, драйвер IWebDriver) {IJavaScriptExecutor ex = (IJavaScriptExecutor) driver; ex.ExecuteScript ("arguments [0] .click ();", element); } `вызывается следующим образом: 'jsClick (driver.FindElement (By.XPath (" xpathOfTheElement "))); `
Иеремия
46

Кажется, для этого есть ошибка в chromedriver (проблема в том, что он помечен как не исправленный) -> GitHub Link

( наградить спонсоров FreedomSponsors возможно, ?)

В комментарии № 27 предлагается обходной путь. Может быть, это будет работать для вас

Тони Лампада
источник
4
Кажется справедливым - если кнопка не отображается на экране, значит, она не кликабельна.
Эван Ноулз
Это не ошибка. Это намеренное поведение, и это правильно. Как и предполагалось, если элемент находится вне области просмотра - необходимо перейти к нему.
Алексей Скрипник,
Я попробовал Firefox и обнаружил, что он не дает этой ошибки, но щелчок по-прежнему игнорируется. Оказалось, что родительский div имел высоту ноль. Как только это было исправлено, оба работали нормально.
17
35

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

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("var evt = document.createEvent('MouseEvents');" + "evt.initMouseEvent('click',true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0,null);" + "arguments[0].dispatchEvent(evt);", findElement(element));

Надеюсь это поможет

XGillerX
источник
16

Я видел это в ситуации, когда окно Chrome, управляемое селеном, было слишком маленьким. Элемент, по которому нужно щелкнуть, был вне области просмотра, и поэтому он не работал.

Это звучит логично ... реальный пользователь должен будет либо изменить размер окна, либо прокрутить, чтобы можно было увидеть элемент и фактически щелкнуть по нему.

После того, как я проинструктировал драйвер селена правильно установить размер окна, эти проблемы исчезли для меня. API веб-драйвера описан здесь .

opichals
источник
15

Вау, здесь много ответов и много хороших.

Я надеюсь, что добавлю что-то к этому из моего опыта.

Ну, ребята, в моем случае была накладка cookie, скрывающая элемент время от времени. Прокрутка до элемента также работает; но, по моему скромному мнению (для моего случая - не панацея для всех), самое простое решение - просто перейти на полный экран (я запускал свои сценарии на 3/4 окна)! Итак, поехали:

driver.manage().window().maximize();

Надеюсь, это поможет!

Xwris Stoixeia
источник
13

рубин / Watir-WebDriver / хром

Я использую следующий трюк и похоже, что он работает:

#scroll to myelement
@browser.execute_script "window.scrollTo(#{myelement.element.wd.location[0]},#{myelement.element.wd.location[1]})"

# click myelement
myelement.when_present.fire_event("click")
Annet
источник
1
Проблема, которую я видел, была с картой местности. Ошибка была такой же, как и в оригинальном сообщении - div "перед" областью, которую мне нужно было щелкнуть. Это была не проблема загрузки AJAX / хронометража / страницы, и область была на виду - я даже не мог прокрутить, чтобы сосредоточиться на ней. Однако изменение метода click с object.click на object.fire_event ("click"), похоже, решило проблему для меня. Я оставил его в блоке begin / rescue, чтобы он никак не влиял на нормальный щелчок Firefox.
Адам Рид
Этот подход работал для меня, когда в окне просмотра были элементы, не видимые.
Джейсон Р. Кумбс
13

Я тоже боролся с этой проблемой. Код отлично работает в FF, не работает в Chrome. То, что я пытался сделать, это щелкнуть по флажку - если его не было видно, я бы прокрутил, чтобы просмотреть, а затем щелкнуть. Даже просмотр в Chrome работает, только несколько нижних пикселей флажка не были видны, поэтому веб-драйвер отказывался нажимать на него.

Мой обходной путь заключается в следующем:

WebElement element = _sectorPopup.findElement(...);

((Locatable) element).getCoordinates().inViewPort();
try {
    element.click();
} catch (Exception e) {
    new Actions(getWebDriver()).sendKeys(Keys.PAGE_DOWN).perform();
    element.click();
}

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

Колибри
источник
Расположение не рекомендуется.
Стив Стейпл
12

Я получал эту ошибку при запуске тестов без xvfb-run. Они работали безупречно на местном уровне. При использовании chrome версии webdriver / chromedriver / chrome / java и т. Д. Идентичны.

Ошибка «не исправить» в chromedriver - ссылка на GitHub, на которую указал Тони Лампада, подсказывает, что это может быть связано с тем, что отображается / не отображается на экране.

Справочное сообщение для xvfb-run показывает следующее:

-s ARGS   --server-args=ARGS    arguments (other than server number and
                                "-nolisten tcp") to pass to the Xvfb server
                                (default: "-screen 0 640x480x8")

Изменение разрешения для xvfb убрало ошибку:

xvfb-run -s "-screen 0 1280x1024x16" ...
U-фория
источник
9

При использовании Protractor мне это помогло:

var elm = element(by.css('.your-css-class'));
browser.executeScript("arguments[0].scrollIntoView();", elm.getWebElement());
elm.click();
Гал Брача
источник
8

Сначала попробуйте получить последнюю версию драйвера Chrome и проверьте, решает ли он проблему.

В моем случае это не решило проблему. Но следующее решение у меня сработало. Ниже приведен код C #, но вы можете следовать той же логике на вашем конкретном языке. Что мы делаем здесь,

Шаг 1: Сфокусируйтесь на элементе, используя объект Selenium Actions,

Шаг 2: Затем нажмите на элемент

Шаг 3: Если есть исключение, то мы инициируем событие JavaScript «Click» для элемента, выполняя сценарий javascript через метод «ExecuteScript» драйвера браузера Selenium.

Вы также можете пропустить шаги 1 и 2 и попробовать только шаг 3. Шаг 3 будет работать сам по себе, но я заметил странное поведение в одном сценарии, когда шаг 3, даже если он успешно щелкнул по элементу, вызвал неожиданное поведение в других частях моего кода после щелчка по элементу.

            try
            {
                //Setup the driver and navigate to the web page...
                var driver = new ChromeDriver("folder path to the Chrome driver");
                driver.Navigate().GoToUrl("UrlToThePage");

                //Find the element...
                var element = driver.FindElement(By.Id("elementHtmlId")); 

                //Step 1
                new Actions(driver).MoveToElement(element).Perform();  

                //Step 2
                element.Click();
            }
            catch (Exception)
            {
                //Step 3
                driver.ExecuteScript("document.getElementById('elementHtmlId').click();");

            }
Sujeewa
источник
У меня была такая же проблема. Ваш первый шаг использования класса Actions прекрасно работает. Я бы никогда не подумал об этом. Спасибо!
Коннер
Ваш первый шаг - отличное решение.
Совандара ЛЕНГ
7

Я сделал этот метод на основе комментария от ответа Тони Лампады. Это работает очень хорошо.

def scroll_to(element)
  page.execute_script("window.scrollTo(#{element.native.location.x}, #{element.native.location.y})")
end
Роджер Гарза
источник
6

Я получил ту же проблему при запуске сценария селена в Python. Вот что я использовал для нажатия на элемент:

from selenium.webdriver.common.action_chains import ActionChains


ActionChains(driver).click(element).perform()
PSR
источник
5

Я столкнулся с подобной проблемой, когда мне приходилось ставить два флажка один за другим. Но я получал ту же ошибку, что и выше. Затем я добавил ожидание между своими шагами для проверки флажков .... это работает нормально и замечательно. Вот шаги: -

  When I visit /administrator/user_profiles
  And I press xpath link "//*[@id='1']"
  Then I should see "Please wait for a moment..."
  When I wait for 5 seconds
  And I press xpath link "//*[@id='2']"
  Then I should see "Please wait for a moment..."
  When I visit /administrator/user_profiles_updates
Milind
источник
Просто добавлю, что это неправильный способ использовать синтаксис Gherkin. Шаги должны быть в форме «дано - когда - тогда», и они не должны смешиваться. Если после «тогда» нужно больше «когда», возможно, нужен отдельный контрольный пример.
Floella
5

Вам нужно использовать фокус или прокрутить этот элемент. Вам также, возможно, придется использовать explict wait.

WebElement firstbutton= driver.findElement(By.xpath("Your Element"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
actions.perform();

ИЛИ

Элемент не кликабелен из-за Spinner / Overlay поверх него:

By loadingImage = By.id("loading image ID");
WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
wait.until(ExpectedConditions.invisibilityOfElementLocated(loadingImage));

ИЛИ

Point p= element.getLocation();
Actions actions = new Actions(driver);
actions.moveToElement(element).movebyoffset(p.x,p.y).click().perform();

ИЛИ

Если все еще не работа, используйте JavascriptExecutor

JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", firstbutton);
Шубхам Джайн
источник
3

По-видимому, это является результатом ошибки «Не исправить» в двоичном файле драйвера Chrome.

Одно из решений, которое сработало для меня (наш пробег может меняться), можно найти в этом обсуждении в группе Google, комментарий № 3:

https://groups.google.com/forum/?fromgroups=#!topic/selenium-developer-activity/DsZ5wFN52tc

Соответствующая часть прямо здесь:

С тех пор я обошел проблему, перейдя непосредственно к разделу родительского якоря пролета.

. Driver.Navigate () GoToUrl (driver.FindElement (By.Id (embeddedSpanIdToClick)) FindElement (By.XPath ( ".. ")) GetAttribute (" HREF")..);

В моем случае я использую Python, поэтому, как только я получил нужный элемент, я просто использовал

driver.get(ViewElm.get_attribute('href'))

Однако я ожидаю, что это сработает, только если элемент, на который вы пытаетесь щелкнуть, является ссылкой ...

Алфей
источник
3

Я столкнулся с той же проблемой с clj-webdriver ( закрытый порт Selenium). Я только что перевел предыдущее решение для удобства. Вы можете вызвать эту функцию, прежде чем делать щелчок или что-либо еще, чтобы избежать этой проблемы.

(defn scrollTo
  "Scrolls to the position of the given css selector if found"
  [q]
  (if (exists? q) 
    (let [ loc (location-once-visible q) jscript (str "window.scrollTo(" (:x loc) "," (:y loc) ")") ] 
      (execute-script jscript))))
Хайме Агудо
источник
3

Это может произойти, если элемент меняет положение, когда драйвер пытается щелкнуть по нему (я видел это и в IE). Драйвер сохраняет исходную позицию, но к тому времени, когда он фактически нажимает на нее, эта позиция больше не указывает на этот элемент. Кстати, у драйвера FireFox такой проблемы нет, очевидно, он «щелкает» по элементам программно.

В любом случае, это может произойти, когда вы используете анимацию или просто динамически меняете высоту элементов (например $("#foo").height(500)). Вам нужно убедиться, что вы нажимаете на элементы только после того, как их высота "установилась". Я закончил с кодом, который выглядит следующим образом (привязки C #):

if (!(driver is FirefoxDriver))
{
    new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(
        d => d.FindElement(By.Id(someDynamicDiv)).Size.Height > initialSize);
}

В случае анимации или любого другого фактора, который вы не можете легко запросить, вы можете использовать «универсальный» метод, который ожидает, что элемент будет стационарным:

var prevLocation = new Point(Int32.MinValue, Int32.MinValue);
int stationaryCount = 0;
int desiredStationarySamples = 6; //3 seconds in total since the default interval is 500ms
return new WebDriverWait(driver, timeout).Until(d => 
{
    var e = driver.FindElement(By.Id(someId));
    if (e.Location == prevLocation)
    {
        stationaryCount++;
        return stationaryCount == desiredStationarySamples;
    }

    prevLocation = e.Location;
    stationaryCount = 0;
    return false;
});
Охад Шнайдер
источник
Похоже, это то, что я испытываю. Я периодически получаю исключение ОП "Другой элемент будет ...", но на снимках экрана показано, что модальный экран находится на экране, а элемент не покрыт, и я использую ожидание перед щелчком. Оказывается, когда модал, который я нажимаю, открывает его, фактически скользит вниз по странице. В зависимости от того, когда селен ожидает фактические выборки DOM, исключение может быть сгенерировано, если он уловил модал во время его перемещения.
Леви Нокер
3

Я встретил это, потому что диалоговое окно загрузки на этом элементе. Я просто решаю это, добавив ожидание, прежде чем работать с этим элементом.

try {
        Thread.sleep((int) (3000));
    } catch (InterruptedException e) {
        //
        e.printStackTrace();
    }

Надеюсь, это поможет!

Хай Хом Хён
источник
3

Объяснение сообщения об ошибке :

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

Может быть много причин, почему элемент не виден в момент теста. Пожалуйста, повторно проанализируйте свою страницу и найдите правильное решение для вашего случая.

Решение для конкретного случая :

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

  • Быстрое решение, как расфокусировать, было бы щелкнуть по некоторому другому элементу в другой части экрана, который не делает ничего. ничего не происходит после действия щелчка.
  • Правильным решением было бы вызвать element.blur()всплывающую подсказку, из-за которой всплывающая подсказка исчезнет.
Dee
источник
3

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

Javascript:

async scrollTo (webElement) {
    await this.driver.executeScript('arguments[0].scrollIntoView(true)', webElement)
    await this.driver.executeScript('window.scrollBy(0,-150)')
}

Ява:

public void scrollTo (WebElement e) {
    JavascriptExecutor js = (JavascriptExecutor) driver; 
    js.executeAsyncScript('arguments[0].scrollIntoView(true)', e)
    js.executeAsyncScript('window.scrollBy(0,-150)')
}
шри
источник
2

Ответ Тони Лампада, комментарий № 27, действительно решил эту проблему для меня, за исключением того, что он предоставил код Java, и мне нужен Python. Вот функция Python, которая прокручивает до позиции элемента и затем щелкает по нему.

def scroll_to_and_click(xpath):
    element = TestUtil.driver.find_element_by_xpath(xpath)
    TestUtil.driver.execute_script('window.scrollTo(0, ' + str(element.location['y']) + ');')
    element.click()

Это решило проблему для меня в Chrome 34.0. Это не нанесло вреда в Firefox 28.0 и IE 11; эти браузеры не подвержены этой проблеме, но прокрутка до положения элемента перед нажатием на него все же не является плохой вещью.

Стив Сапорта
источник
2

Может быть, это не совсем чистое решение, но оно работает:

try:
    el.click()
except WebDriverException as e:
    if 'Element is not clickable at point' in e.msg:
        self.browser.execute_script(
            '$("{sel}").click()'.format(sel=el_selector)
        )
    else:
        raise
radeklos
источник
2

Я получал эту ошибку, потому что я тестировал зависание, а затем мне нужно было нажать на ссылку под всплывающей подсказкой. Решение было добавить, page.find('.sp-logo').hoverпрежде чем click_linkубрать всплывающую подсказку.

Дэн Кон
источник
2

Забавно, все время, которое я проводил, просматривая различные ответы, никто не пробовал очевидного, чего, конечно, я тоже не делал. Если ваша страница использовала один и тот же идентификатор несколько раз, как и моя («newButton»,), а нужный вам не первый найденный, то, по всей вероятности, вы получите эту ошибку. Самое простое, что можно сделать (C #):

var testIt = driver.FindElements(By.Id("newButton"));

Обратите внимание, что это FindElements, а не FindElement.

А затем проверьте, сколько результатов вернулось из поиска. Если это второй, вы можете использовать:

testit[1].Click();

Или получите те, кто повторно использовал идентификаторы, чтобы исправить их.

CargoMeister
источник
Если это происходит из-за того, что для этого идентификатора имеется несколько кнопок и одновременно отображается только одна, .First(x => x.Visible)лучшее решение предполагает использование LINQ для поиска первого видимого элемента (добавление к вызову FindElements) и щелчок по нему, если он не нулевой.
Шон Дагган,
2

После тестирования всех упомянутых предложений ничего не сработало. Я сделал этот код. Это работает, но не красиво

public void click(WebElement element) {
    //https://code.google.com/p/selenium/issues/detail?id=2766 (fix)
    while(true){
        try{
            element.click();
            break;
        }catch (Throwable e){
            try {
                Thread.sleep(200);
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }
        }
    }
}

public void click(String css) {
    //https://code.google.com/p/selenium/issues/detail?id=2766 (fix)
    while(true){
        try{
            driver.findElement(By.cssSelector(css)).click();
            break;
        }catch (Throwable e){
            try {
                Thread.sleep(200);
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }
        }
    }
}
Бруно Ли
источник
2

Я делаю своего рода грубую силу кликов, и это работает для меня.

try:
    elem.click()
except:
    print "failed to click"
    size = elem.size
    mid_of_y = int(size["height"])/2
    stepts_to_do_to_left = int(size["width"])
    while stepts_to_do_to_left > 0:
        try:
            print stepts_to_do_to_left, mid_of_y
            action = webdriver.common.action_chains.ActionChains(driver)
            action.move_to_element_with_offset(elem, mid_of_y, stepts_to_do_to_left)
            action.click()
            action.perform()
            print "DONE CLICK"
            break
        except:
            pass
супер Марио
источник
2

Если вы jQueryзагрузили на страницу, вы можете выполнить следующую команду javascript:

"$('#" + element_id + "').click()"

Пример использования Python Executor:

driver.execute_script("$('#%s').click()" % element_id)
Zags
источник
1

У меня была та же проблема, и это было вызвано конфликтом идентификаторов между div и ссылкой внутри div. Драйвер нажимал на div вместо ссылки, которую я хотел. Я изменил div id, и он работал правильно.

Перед:

<div id="logout"><a id="logout" href="logoutLink">logout</a></div>

После:

<div id="differentId"><a id="logout" href="logoutLink">logout</a></div>
Джордан Сильва
источник
Не удивлен, что вызвало у вас проблемы. На странице должен быть только один идентификатор. Это разматывало плохой дизайн, а не обходной путь.
Дэйв Лоуренс,
1

В Drupal при использовании Selenium :

    // Get element.
    $element = $this->driver->getElement('xpath=//input');        
    // Get screen location.
    $location = $element->getLocation();
    // To make sure that Chrome correctly handles clicking on the elements 
    // outside of the screen, we must move the cursor to the element's location.
    $this->driver->moveCursor($location['x'], $location['y']);

    // Optionally, set some sleep time (0.5 sec in the example below) if your
    // elements are visible after some animation.
    time_nanosleep(0, 500000000);

    // Click on the element.
    $element->click();
Алекс Скрипник
источник