Error de depuración "No se puede hacer clic en el elemento en el punto"

397

Solo veo esto en Chrome.

El mensaje de error completo dice:

"org.openqa.selenium.WebDriverException: No se puede hacer clic en el elemento en el punto (411, 675). Otro elemento recibiría el clic: ..."

El elemento que 'recibiría el clic' está al lado del elemento en cuestión, no encima y no se superpone, no se mueve por la página.

He intentado agregar un desplazamiento, pero eso tampoco funciona. El elemento se encuentra en la ventana mostrada sin necesidad de desplazarse.

usuario1591169
fuente
2
¿Esperas a que se cargue la página? ¿Quizás otro elemento se superponga mientras se carga la página?
Herokiller
55
Larga historia corta para aquellos que acaban de llegar: EL ELEMENTO NO ES VISIBLE EN LA PÁGINA Y POR LO TANTO NO ES CLICABLE. NECESITA DESPLAZAR EL VIEWPORT EMITIENDO la ventana.
Chris B. Behrens
67
@ ChrisB.Behrens Este no es siempre el caso. Este error particular también se puede dar cuando un elemento está cubierto por otro. Tuve esta excepción al intentar hacer clic en un botón que era otro elemento con posición fija.
Martin Cassidy
44
No solo Chromedriver tuvo el mismo problema con Firefox. Solucioné el problema implementando un retraso para esperar hasta que la página se haya recargado completamente, como lo sugirieron otros arriba.
codervince
55
Creo que este es un consejo absolutamente incorrecto para emitir scrollTo o hacer cualquier espera. Parece que el algoritmo de clic de selenio es: 1. calcular la posición del elemento 2. desplazarse a esta posición (para que no tenga que emitirlo usted mismo) 3. hacer clic en esta posición (la excepción proviene de la última afirmación que verifica qué elemento se encuentra en este posición justo antes del envío del evento de clic real) Mis consejos son: 1. compruebe si el elemento está dentro de su ventana gráfica. 2. verifique si el elemento está cubierto por algún otro (como menús fijos), escóndelos si hay alguno o desplácese manualmente antes de hacer clic sin depender de scrollTo incorporado.
Vitalik Verhovodov

Respuestas:

325

Esto es causado por los siguientes 3 tipos:

1. El elemento no es visible para hacer clic.

Use Actions o JavascriptExecutor para hacer clic.

Por acciones:

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

Actions actions = new Actions(driver);

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

Por 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.

o

JavascriptExecutor jse = (JavascriptExecutor)driver;

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

Luego haga clic en el elemento.

2. La página se actualiza antes de hacer clic en el elemento.

Para esto, haga que la página espere unos segundos.

3. Se puede hacer clic en el elemento, pero hay una rueda giratoria / superposición encima

El siguiente código esperará hasta que desaparezca la superposición

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

WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);

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

Luego haga clic en el elemento.

Prabu Ananthakrishnan
fuente
52
Hay un tercer tipo de causa, que es que su elemento está envuelto en un div o un lapso. La página se puede cargar completamente y completamente dentro de la ventana gráfica, pero Chromedriver se negará a hacer clic en ella, donde el controlador web para FF e IE no tiene ningún problema. Un humano real no tiene idea de que existe el lapso, y al navegador no le importa cuando hace clic en él, como humano. Ni moverse ni esperar resolverá este problema; o evitar Chrome / chromedriver, o reescribir el HTML de la página parece ser la única opción para las personas en el caso 3.
Don Simon
54
@DonSimon Tuve el mismo problema que tú. Pude evitarlo usando .SendKeys (Keys.Return) en lugar de .Click. Esto funcionó para mí en Chrome, donde tenía este problema y en Firefox, donde tenía otro problema similar en este enlace en particular (ancla envuelta en un Div).
Peter Bernier
17
La solución sugerida por @PeterBernier funciona bien en el caso de que el elemento esté envuelto en un div o un span. En Python utilicé .send_keys ('\ n') para simular el clic y solucionar el problema en Chrome.
GJ
44
Si un elemento está oculto por un elemento div, el siguiente código lo arregla. executeJavascript ("argumentos [0] .click ();", selenium.findElement (localizador));
EsotericNonsense
También puede esperar a que se haga clic en el elemento. wait.Until (ExpectedConditions.ElementToBeClickable (webElement));
Chielus
67

También puede usar el clic de JavaScript y no sería necesario desplazarse en ese momento.

IJavaScriptExecutor ex = (IJavaScriptExecutor)Driver;
ex.ExecuteScript("arguments[0].click();", elementToClick);
Bart Wojtala
fuente
55
¡Increíble! Me pregunto por qué el selenio no elimina el método click () que proporcionan, dado que hay condiciones en las que isDisplayed () y isEnabled () no son suficientes para hacer clic en un elemento, y esta parece ser la única solución. ¡Gracias!
Giovanni Bitliner
2
+1: Esta es la solución que funcionó para mí. actions.MoveToElementno funcionó para mí en C # y las otras soluciones de desplazamiento parecían un poco frágiles, ya que existía la posibilidad de que el desplazamiento no pudiera ver correctamente el elemento o que la posición del elemento en la página pudiera cambiar.
Usuario
1
esta solución es la más fácil si el elemento no está a la vista, pero existe en la página
Yashveer Rana
@Giovanni Bitliner No proporcionan este método ya que no es un escenario de usuario real. Los usuarios también deberían tener que esperar hasta que desaparezca el cargador. Creo que eso es algo maravilloso sobre el selenio.
Gideon Mulder
+1 También funcionó para mí. Acabo de agregar el método flwg a mi código: `private void jsClick (elemento IWebElement, controlador IWebDriver) {controlador IJavaScriptExecutor ex = (IJavaScriptExecutor); ej. ExecuteScript ("argumentos [0] .click ();", elemento); } `invocado de esta manera: 'jsClick (driver.FindElement (By.XPath (" xpathOfTheElement "))); `
Jeremias
46

Parece que hay un error en chromedriver para eso (el problema es que está marcado como no se solucionará) -> Enlace GitHub

(¿ Hacer una recompensa por FreedomSponsors quizás?)

Hay una solución alternativa sugerida en el comentario # 27. Tal vez funcione para ti

Tony Lâmpada
fuente
44
Parece justo: si el botón no está en la pantalla, entonces no se puede hacer clic.
Evan Knowles
Esto no es un error. Este es el comportamiento previsto y es correcto. Como sugirió otro, si el elemento está fuera de la ventana gráfica, debe desplazarse a él.
Alex Skrypnyk
Intenté Firefox y descubrí que no daba este error, pero el clic aún se ignoró. Resultó que el div padre tenía una altura de cero. Una vez que se solucionó, ambos funcionaron bien.
dansalmo
35

Tuve el mismo problema, probé todas las soluciones ofrecidas pero no funcionaron para mí. finalmente usé esto:

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

Espero que esto ayude

XGillerX
fuente
16

He visto esto en la situación en que la ventana de Chrome impulsada por el selenio se abrió demasiado pequeña. El elemento en el que se hizo clic estaba fuera de la ventana gráfica y, por lo tanto, estaba fallando.

Eso suena lógico ... el usuario real tendría que cambiar el tamaño de la ventana o desplazarse para que sea posible ver el elemento y, de hecho, hacer clic en él.

Después de indicarle al controlador de selenio que establezca el tamaño de la ventana de manera adecuada, este problema desapareció. La API del controlador web se describe aquí .

opichals
fuente
15

Wow, muchas respuestas aquí, y muchas buenas.

Espero agregar algo a esto desde mi experiencia.

Bueno chicos, en mi caso había una superposición de cookies que ocultaba el elemento ocasionalmente. Desplazarse al elemento también funciona; pero en mi humilde opinión (para mi caso, no es una panacea para todos) la solución más simple es ir a pantalla completa (estaba ejecutando mis scripts en 3/4 de la ventana de la pantalla). Así que, aquí vamos:

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

¡Espero que ayude!

Xwris Stoixeia
fuente
13

rubí / watir-webdriver / cromo

Uso el siguiente truco y parece que funciona:

#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
fuente
1
El problema que estaba viendo era con un mapa del área. El error fue el mismo que el de la publicación original aquí: un div "delante" del área en la que necesitaba hacer clic. No era un problema de carga de páginas / sincronización / AJAX, y el área estaba a la vista, ni siquiera podía desplazarme para enfocarme en ella. Sin embargo, cambiar mi método de clic de object.click a object.fire_event ("clic") parece haber resuelto el problema. Lo dejé en un bloque de inicio / rescate para que no afecte la forma en que Firefox hace clic normalmente.
Adam Reed
Este enfoque me solucionó el problema cuando había elementos no visibles en la ventana gráfica.
Jason R. Coombs
13

Yo también luché con este problema. El código funciona bien en FF, falla en Chrome. Lo que intentaba hacer era hacer clic en una casilla de verificación; si no estaba a la vista, me desplazaría para ver y luego hacer clic. Incluso desplazarse a la vista funciona en Chrome, solo los pocos píxeles inferiores de la casilla de verificación no estaban visibles, por lo que el controlador web se negó a hacer clic en él.

Mi solución es esta:

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 también tiene problemas con sendKeys, a veces es necesario usar Actions. Obviamente, necesita saber en qué dirección y cuánto debe ir para que su kilometraje pueda variar. Pero prefiero esto al hack de JavaScript, así que lo publico aquí en caso de que alguien más lo encuentre útil.

kolibri
fuente
Locatable está en desuso.
Steve Staple
12

Recibí este error al ejecutar pruebas sin cabeza con xvfb-run. Estaban trabajando perfectamente a nivel local. Utilizando Chrome, las versiones de webdriver / chromedriver / chrome / java, etc. son todas idénticas.

El error 'no solucionará' en chromedriver: GitHub Link, señalado por Tony Lâmpada, sugirió que esto puede estar relacionado con lo que es / no es visible en la pantalla.

El mensaje de ayuda para xvfb-run muestra lo siguiente:

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

Cambiar la resolución para xvfb hizo que el error desapareciera:

xvfb-run -s "-screen 0 1280x1024x16" ...
u-phoria
fuente
9

Cuando uso el transportador esto me ayudó:

var elm = element(by.css('.your-css-class'));
browser.executeScript("arguments[0].scrollIntoView();", elm.getWebElement());
elm.click();
Gal Bracha
fuente
8

Primero, intente obtener el último controlador de Chrome y verifique si resuelve el problema.

En mi caso, no solucionó el problema. Pero, la siguiente solución funcionó para mí hasta ahora. El siguiente es el código C # pero puede seguir la misma lógica en su idioma específico. Lo que hacemos aquí es

Paso 1: concéntrate en el elemento usando el objeto Selenium Actions,

Paso 2: luego haz clic en el elemento

Paso 3: Si hay una excepción, activamos un evento "Click" de JavaScript en el elemento ejecutando el script javascript a través del método "ExecuteScript" del controlador del navegador Selenium.

También puede omitir los pasos 1 y 2 e intentar solo el paso 3 también. El paso 3 funcionaría solo, pero noté un comportamiento extraño en un escenario en el que el paso 3, aunque hizo clic con éxito en el elemento, causó un comportamiento inesperado en otras partes de mi código después de hacer clic en el elemento.

            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
fuente
Estaba teniendo este mismo problema. Su paso 1 de usar la clase Actions funciona muy bien. Nunca hubiera pensado en esto. ¡Gracias!
Conner
Tu primer paso es una gran solución.
Sovandara LENG
7

Hice este método basado en un comentario de la respuesta de Tony Lâmpada. Funciona muy bien.

def scroll_to(element)
  page.execute_script("window.scrollTo(#{element.native.location.x}, #{element.native.location.y})")
end
Roger Garza
fuente
6

Estaba teniendo el mismo problema al ejecutar el script de selenio en Python. Esto es lo que solía hacer clic en el elemento:

from selenium.webdriver.common.action_chains import ActionChains


ActionChains(driver).click(element).perform()
psr
fuente
5

Estaba enfrentando un problema similar cuando tengo que marcar dos casillas de verificación una tras otra. Pero estaba obteniendo el mismo error anterior. Desde entonces agregué esperar entre mis pasos para marcar las casillas de verificación ... funciona bien y muy bien. Aquí están los pasos: -

  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
fuente
Solo agrego que esta no es la forma correcta de usar la sintaxis de Gherkin. Los pasos deben estar en la forma "dado - cuando - entonces" y no deben mezclarse. Si se necesitan más "cuándo" después de un "entonces", probablemente se necesite un caso de prueba por separado.
Floella
5

Debe usar el foco o desplazarse por ese elemento. También es posible que deba usar la espera explícita.

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

O

No se puede hacer clic en el elemento debido a un Spinner / Overlay encima:

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

O

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

O

Si todavía no funciona, use JavascriptExecutor

JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", firstbutton);
Shubham Jain
fuente
3

Aparentemente, este es el resultado de un error "No se solucionará" en el binario del controlador de Chrome.

Una solución que funcionó para mí (Nuestro kilometraje puede variar) se puede encontrar en esta discusión del Grupo de Google, Comentario # 3:

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

La porción relevante está aquí:

Desde entonces, he solucionado el problema navegando directamente a la href del ancla principal del span.

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

En mi caso, estoy usando Python, así que una vez que obtuve el elemento deseado, simplemente usé

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

Sin embargo, esperaría que esto solo funcione si el elemento en el que está intentando hacer clic es un enlace ...

alfeo
fuente
3

Estaba enfrentando el mismo problema con clj-webdriver (puerto clojure de Selenium). Acabo de traducir la solución anterior a clojure por conveniencia. Puede llamar a esta función antes de hacer clic o lo que sea para evitar ese problema.

(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))))
Jaime Agudo
fuente
3

Esto podría suceder si el elemento cambia de posición mientras el controlador intenta hacer clic en él (también lo he visto con IE). El controlador retiene la posición inicial, pero cuando llega a hacer clic en él, esa posición ya no apunta a ese elemento. El controlador FireFox no tiene este problema BTW, aparentemente "hace clic" en los elementos mediante programación.

De todos modos, esto puede suceder cuando usa animaciones o simplemente cambia la altura de los elementos dinámicamente (por ejemplo $("#foo").height(500)). Debe asegurarse de que solo hace clic en los elementos después de que su altura se haya "establecido". Terminé con un código que se ve así (enlaces de C #):

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

En el caso de una animación o cualquier otro factor que no pueda consultar fácilmente, puede utilizar un método "genérico" que espere a que el elemento sea estacionario:

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;
});
Ohad Schneider
fuente
Esto parece ser lo que estoy experimentando. Intermitentemente obtengo la excepción "Otro elemento podría ..." del OP, pero las capturas de pantalla muestran que el modal está en la pantalla y el elemento no está cubierto y uso esperas antes de hacer clic. Resulta que cuando el modal en el que estoy haciendo clic se abre, en realidad se desliza hacia abajo en la página. Dependiendo de cuándo el selenio espera muestras reales del DOM, la excepción se puede lanzar si detecta el modal mientras se movía.
Levi Noecker
3

Lo conocí porque una cubierta de diálogo de carga en este elemento. Simplemente lo resuelvo agregando una espera antes de trabajar con este elemento.

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

¡Espero que esto ayude!

Huy Hóm Hỉnh
fuente
3

Explicación del mensaje de error :

El mensaje de error simplemente dice que el elemento en el que desea hacer clic está presente, pero no está visible. Podría estar cubierto por algo o temporal no visible.

Podría haber muchas razones por las cuales el elemento no es visible en el momento de la prueba. Vuelva a analizar su página y encuentre la solución adecuada para su caso.

Solución para caso particular :

En mi caso, este error se produce cuando una información sobre herramientas del elemento de pantalla en el que hice clic aparecía sobre el elemento en el que quería hacer clic a continuación. Desenfocar fue una solución que necesitaba.

  • Solución rápida cómo desenfocar sería hacer clic en otro elemento en otra parte de la pantalla que no hace "nada" resp. No sucede nada después de una acción de clic.
  • La solución adecuada sería llamar element.blur()al elemento que muestra la información sobre herramientas, lo que haría que la información sobre herramientas desapareciera.
Dee
fuente
3

La razón de este error es que el elemento en el que está intentando hacer clic no está en la ventana gráfica (región vista por el usuario) del navegador. Entonces, la forma de superar esto es desplazarse primero al elemento deseado y luego realizar el clic.

Javascript:

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

Java:

public void scrollTo (WebElement e) {
    JavascriptExecutor js = (JavascriptExecutor) driver; 
    js.executeAsyncScript('arguments[0].scrollIntoView(true)', e)
    js.executeAsyncScript('window.scrollBy(0,-150)')
}
sri
fuente
2

Re la respuesta de Tony Lâmpada, el comentario # 27 realmente resolvió el problema para mí, excepto que proporcionó código Java y necesitaba Python. Aquí hay una función de Python que se desplaza a la posición del elemento y luego hace clic en ella.

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

Esto resolvió el problema para mí en Chrome 34.0. No causó ningún daño en Firefox 28.0 e IE 11; esos navegadores no están sujetos al problema, pero desplazarse a la posición del elemento antes de hacer clic todavía no es algo malo.

Steve Saporta
fuente
2

Tal vez no sea una solución realmente limpia, pero funciona:

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
fuente
2

Estaba recibiendo este error porque probé un elemento emergente y luego tuve que hacer clic en el enlace debajo de la información sobre herramientas. La solución fue agregar page.find('.sp-logo').hoverantes click_linkpara quitar la información sobre herramientas.

Dan Kohn
fuente
2

Es curioso, todo el tiempo que pasé mirando las diversas respuestas, nadie había intentado lo obvio, que por supuesto, yo tampoco. Si su página tiene la misma identificación utilizada varias veces, como la mía, ("newButton",) y la que desea no es la primera encontrada, entonces es muy probable que obtenga este error. Lo más fácil de hacer (C #):

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

Tenga en cuenta que es FindElements, no FindElement.

Y luego pruebe para ver cuántos resultados regresaron de la recuperación. Si es el segundo, puede usar:

testit[1].Click();

O consiga los identificadores reutilizados para repararlos.

CargoMeister
fuente
Si esto se debe a que hay varios botones con esa ID y solo se muestra uno a la vez, una solución superior implica usar LINQ para encontrar el primer elemento que es visible (agregar .First(x => x.Visible)a la llamada FindElements) y hacer clic en eso si no es nulo.
Sean Duggan el
2

Después de probar todas las sugerencias mencionadas, nada funcionó. Hice este código. Funciona pero no es hermoso.

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();
            }
        }
    }
}
Bruno Lee
fuente
2

Hago una especie de fuerza bruta de clics y me funciona.

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
Super Mario
fuente
2

Si ha jQuerycargado en la página, puede ejecutar el siguiente comando de JavaScript:

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

Ejemplo usando el ejecutor de python:

driver.execute_script("$('#%s').click()" % element_id)
Zags
fuente
1

Tuve el mismo problema y fue causado por un conflicto de identificación entre el div y el enlace dentro del div. Entonces el controlador estaba haciendo clic en el div en lugar del enlace que quería. Cambié la identificación div y funcionó correctamente.

Antes de:

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

Después:

<div id="differentId"><a id="logout" href="logoutLink">logout</a></div>
Jordan Silva
fuente
No me sorprende que eso te haya causado problemas. Solo debe haber una identificación en una página. Eso fue desenrollar un mal diseño, no una solución alternativa.
Dave Lawrence el
1

En Drupal cuando se usa selenio :

    // 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();
Alex Skrypnyk
fuente