Depurando o erro "O elemento não pode ser clicado no ponto"

397

Eu vejo isso apenas no Chrome.

A mensagem de erro completa é a seguinte:

"org.openqa.selenium.WebDriverException: O elemento não pode ser clicado no ponto (411, 675). Outro elemento receberia o clique: ..."

O elemento que 'receberia o clique' fica ao lado do elemento em questão, não em cima e nem sobrepondo, não se movendo pela página.

Tentei adicionar um deslocamento, mas isso também não funciona. O item está na janela exibida sem a necessidade de rolagem.

user1591169
fonte
2
Você espera a página carregar? Talvez outro elemento o sobreponha enquanto a página está carregando?
Herokiller 13/08/12
55
Longa história para quem está chegando - O ELEMENTO NÃO É VISÍVEL NA PÁGINA E, POR ISSO, NÃO É CLICÁVEL. VOCÊ PRECISA ROLAR O VIEWPORT EMITTING window.ScrollTo.
22414 Chris Chris Behrens
67
@ ChrisB.Behrens Esse nem sempre é o caso. Este erro específico também pode ser fornecido quando um elemento é coberto por outro. Eu tive essa exceção ao tentar clicar em um botão que estava sendo outro elemento com a posição corrigida.
Martin Cassidy
4
Não é apenas o Chromedriver - teve o mesmo problema com o Firefox. Corrigi o problema implementando um atraso para esperar até que a página recarregasse completamente, conforme sugerido por outras pessoas acima.
Codevince
5
Eu acho que esse é um conselho absolutamente errado para emitir scrollTo ou fazer qualquer espera. Parece que o algoritmo do selênio é: 1. calcular a posição do elemento 2. scrollTo para esta posição (para que você não precise emiti-lo) 3. clique para esta posição (a exceção vem da última asserção, que verifica qual elemento está presente nesse elemento) posição imediatamente antes do envio real do evento de clique) Meus conselhos são: 1. verifique se o elemento está dentro da sua janela de visualização. 2. verifique se o elemento está coberto por algum outro (como menus fixos), oculte-os, se houver algum, ou role manualmente antes de clicar sem confiar no scrollTo incorporado.
Vitalik Verhovodov 18/03/19

Respostas:

325

Isso é causado pelos seguintes 3 tipos:

1.O elemento não está visível para clicar.

Use Actions ou JavascriptExecutor para fazer clique.

Por ações:

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.

ou

JavascriptExecutor jse = (JavascriptExecutor)driver;

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

Depois clique no elemento.

2.A página está sendo atualizada antes de clicar no elemento.

Para isso, faça a página aguardar alguns segundos.

3. O elemento é clicável, mas há um botão giratório / sobreposição em cima dele

O código abaixo irá esperar até que a sobreposição desapareça

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

WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);

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

Depois clique no elemento.

Prabu Ananthakrishnan
fonte
52
Existe um terceiro tipo de causa, que é o fato de seu elemento ser envolvido em uma div ou extensão. A página pode ser totalmente carregada e completamente dentro da janela de visualização, mas o Chromedriver se recusará a clicar nela, onde o webdriver para FF e IE não tem problema. Um ser humano real não tem idéia de que a extensão existe, e o navegador não se importa quando você realmente clica nele, como humano. Nem se movimentar nem esperar resolverá esse problema; ou evite o Chrome / chromedriver ou reescreva o HTML da página parece ser a única opção para as pessoas no caso 3. #
Don Simon
54
@ DonSimon Eu tive o mesmo problema que você. Consegui contorná-lo usando .SendKeys (Keys.Return) em vez de .Click. Isso funcionou para mim no Chrome, onde eu estava tendo esse problema, e no Firefox, onde eu estava tendo outro problema semelhante nesse link específico (âncora envolvida em uma Div).
Peter Bernier
17
A solução sugerida por @PeterBernier funciona bem no caso em que o elemento é envolvido em uma div ou extensão. No Python, usei .send_keys ('\ n') para simular o clique e solucionar o problema no Chrome.
GJ
4
Se um elemento estiver oculto por um elemento div, o código a seguir o corrige. executeJavascript ("argumentos [0] .click ();", selenium.findElement (localizador));
EsotericNonsense
Você também pode esperar que o elemento seja clicável. wait.Until (ExpectedConditions.ElementToBeClickable (webElement));
Chielus 28/11
67

Você também pode usar o clique do JavaScript e a rolagem não seria necessária.

IJavaScriptExecutor ex = (IJavaScriptExecutor)Driver;
ex.ExecuteScript("arguments[0].click();", elementToClick);
Bart Wojtala
fonte
5
Inacreditável! Eu me pergunto por que o selênio não descarta o método click () que eles fornecem, já que existem condições nas quais isDisplayed () e isEnabled () não são suficientes para clicar em um elemento, e essa parece ser a única solução. Obrigado!
Giovanni Bitliner
2
+1: esta é a solução que funcionou para mim. actions.MoveToElementnão funcionou para mim em C # e as outras soluções de rolagem pareciam um pouco frágeis, pois havia uma chance de a rolagem não conseguir exibir corretamente o elemento ou de mudar a posição do elemento na página.
Utilizador
11
esta solução é a mais fácil se o elemento não está em vista, mas existe na página
Yashveer Rana
@Giovanni Bitliner Eles não fornecem esse método, pois não é um cenário de usuário real. Os usuários também devem esperar até o carregador desaparecer. Eu acho que é uma coisa maravilhosa sobre o selênio.
Gideon Mulder #
+1 Também funcionou para mim. Acabei de adicionar o método flwg ao meu código: `private void jsClick (elemento IWebElement, driver IWebDriver) {driver IJavaScriptExecutor ex = (IJavaScriptExecutor); ex.ExecuteScript ("argumentos [0] .click ();", elemento); } `invocou desta maneira: 'jsClick (driver.FindElement (By.XPath (" xpathOfTheElement "))); `
Jeremias
46

Parece haver um bug no chromedriver para isso (o problema é que está marcado como não será corrigido) -> GitHub Link

(colocar uma recompensa nos patrocinadores da Freedom, talvez?)

Há uma solução alternativa sugerida no comentário # 27. Talvez funcione para você ...

Tony Lâmpada
fonte
4
Parece justo - se o botão não estiver na tela, ele não será realmente clicável.
Evan Knowles
Isso não é um bug. Esse é o comportamento pretendido e está correto. Conforme sugerido, se o elemento estiver fora da janela de visualização - você precisará rolar para ela.
Alex Skrypnyk
Eu tentei o Firefox e descobri que não havia esse erro, mas o clique ainda era ignorado. Acabou sendo o div principal que tinha uma altura zero. Uma vez consertado, ambos funcionaram bem.
dansalmo
35

Eu tive o mesmo problema, tentei todas as soluções oferecidas, mas elas não funcionaram para mim. eventualmente eu usei isso:

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 isto ajude

XGillerX
fonte
16

Eu já vi isso na situação em que a janela do Chrome movida a selênio foi aberta muito pequena. O elemento a ser clicado estava fora da janela de exibição e, portanto, estava falhando.

Isso parece lógico ... o usuário real teria que redimensionar a janela ou rolar para que seja possível ver o elemento e, de fato, clicar nele.

Depois de instruir o driver selenium para definir o tamanho da janela adequadamente, esses problemas desapareceram para mim. A API do driver da web está descrita aqui .

opichals
fonte
15

Uau, muitas respostas aqui, e muitas boas.

Espero acrescentar algo a isso da minha experiência.

Bem, pessoal, no meu caso, houve uma sobreposição de cookies ocultando o elemento ocasionalmente. Rolar para o elemento também funciona; mas, na minha humilde opinião (no meu caso, não é uma panacéia para todos), a solução mais simples é apenas ir para tela cheia (eu estava executando meus scripts em 3/4 da janela da tela)! Aqui vamos nos:

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

Espero que ajude!

Xwris Stoixeia
fonte
13

rubi / driver de água / cromado

Eu uso o seguinte truque e 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
fonte
11
O problema que eu estava vendo era com um mapa da área. O erro foi o mesmo da postagem original aqui - uma div "na frente" da área em que eu precisava clicar. Não era um problema de carregamento de página / tempo / AJAX, e a área estava à vista - eu nem conseguia rolar para focar nela. No entanto, alterar meu método de clique de object.click para object.fire_event ("click") parece ter resolvido o problema para mim. Deixei-o em um bloco de início / resgate para que não afetasse o modo como o Firefox está clicando normalmente.
Adam Reed
Essa abordagem resolveu o problema para mim quando havia elementos não visíveis na janela de exibição.
Jason R. Coombs
13

Eu também lutei com esse problema. O código funciona bem no FF, falha no Chrome. O que eu estava tentando fazer era clicar em uma caixa de seleção - se não estivesse à vista, eu rolaria para ver e, em seguida, clique. Mesmo rolando para a visualização funciona no Chrome, apenas os poucos pixels inferiores da caixa de seleção não estavam visíveis, e o webdriver se recusou a clicar nela.

Minha solução alternativa é 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();
}

O Chrome também tem problemas com as sendKeys, às vezes é necessário usar ações. Obviamente, você precisa saber em que direção e quanto precisa seguir para que sua milhagem possa variar. Mas eu prefiro isso ao javascript, por isso estou postando aqui caso alguém ache útil.

Kolibri
fonte
A localização está obsoleta.
Steve Staple
12

Eu estava recebendo esse erro ao executar testes sem cabeça com o xvfb-run. Eles estavam trabalhando perfeitamente localmente. Usando o chrome, as versões do webdriver / chromedriver / chrome / java etc são todas idênticas.

O bug 'não consertará' no chromedriver - GitHub Link apontado por Tony Lâmpada sugeriu que isso pode estar relacionado ao que é / não é visível na tela.

A mensagem de ajuda para xvfb-run mostra o seguinte:

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

Alterar a resolução do xvfb fez com que o erro desaparecesse:

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

Ao usar o transferidor, isso me ajudou:

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

Primeiro, tente obter o driver mais recente do Chrome e verifique se ele resolve o problema.

No meu caso, não corrigiu o problema. Mas, a solução a seguir funcionou para mim até agora. A seguir está o código C #, mas você pode seguir a mesma lógica no seu idioma específico. O que fazemos aqui é,

Etapa 1: concentre-se no elemento usando o objeto Ações Selenium,

Etapa 2: Em seguida, clique no elemento

Etapa 3: se houver uma exceção, acionamos um evento javascript "Click" no elemento, executando o script javascript através do método "ExecuteScript" do driver do navegador Selenium.

Você também pode pular as etapas 1 e 2 e tentar apenas a etapa 3 também. A etapa 3 funcionaria por conta própria, mas notei algum comportamento estranho em um cenário em que a etapa 3, mesmo que ela clicasse com sucesso no elemento, causava um comportamento inesperado em outras partes do meu código depois de clicar no 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
fonte
Eu estava tendo esse mesmo problema. Sua etapa 1 de usar a classe Actions funciona muito bem. Eu nunca teria pensado nisso. Obrigado!
Conner
Seu primeiro passo é uma ótima solução.
Sovandara LENG 10/09/19
7

Eu fiz esse método com base em um comentário da resposta de Tony Lâmpada. Funciona muito bem.

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

Eu estava recebendo o mesmo problema ao executar o script selenium em python. Aqui está o que eu costumava clicar no elemento:

from selenium.webdriver.common.action_chains import ActionChains


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

Eu estava enfrentando um problema semelhante, onde eu tenho que marcar duas caixas de seleção uma após a outra. Mas eu estava recebendo o mesmo erro acima. aqui estão os passos: -

  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
fonte
Apenas adicionando que essa não é a maneira correta de usar a sintaxe Gherkin. As etapas devem estar no formato "dado - quando - então" e não devem ser misturadas. Se mais "whens" forem necessários após um "then", provavelmente será necessário um caso de teste separado.
Floella 20/08/19
5

Você precisa usar o foco ou rolar esse elemento. Você também pode precisar usar a espera explícita.

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

OU

O elemento não pode ser clicado por causa de um Spinner / Overlay em cima dele:

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

OU

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

OU

Se ainda não funcionar, use JavascriptExecutor

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

Aparentemente, este é o resultado de um erro "Não será corrigido" no binário do driver Chrome.

Uma solução que funcionou para mim (nossa milhagem pode variar) pode ser encontrada nesta discussão do grupo do Google, comentário nº 3:

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

A parte relevante está aqui:

Desde então, resolvi o problema navegando diretamente para o href da âncora pai do período.

Driver.Navigate (). GoToUrl (driver.FindElement (Por.Id (incorporadoSpanIdToClick)). FindElement (Por.XPath ("..")). GetAttribute ("href"));

No meu caso, estou usando Python, então, quando obtive o elemento desejado, simplesmente usei

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

Espero que isso funcione apenas, no entanto, se o elemento que você está tentando clicar for um link ...

alpheus
fonte
3

Eu estava enfrentando o mesmo problema com o clj-webdriver (porta clojure do Selenium). Acabei de traduzir a solução anterior para clojure por conveniência. Você pode chamar essa função antes de clicar ou o que quer que seja para evitar esse 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
fonte
3

Isso pode acontecer se o elemento mudar de posição enquanto o driver estiver tentando clicá-lo (também vi isso no IE). O motorista mantém a posição inicial, mas no momento em que realmente clica nela, essa posição não está mais apontando para esse elemento. O driver do FireFox não tem esse problema, aparentemente ele "clica" em elementos programaticamente.

De qualquer forma, isso pode acontecer quando você usa animações ou simplesmente altera a altura dos elementos dinamicamente (por exemplo $("#foo").height(500)). Você precisa certificar-se de clicar apenas nos elementos depois que a altura "estabilizar". Acabei com um código parecido com este (ligações em C #):

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

No caso de uma animação ou qualquer outro fator que você não possa consultar facilmente, você pode utilizar um método "genérico" que aguarda o elemento ser estacionário:

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
fonte
Parece ser o que estou experimentando. Intermitentemente, recebo a exceção "O outro elemento seria ..." do OP, mas as capturas de tela mostram que o modal está na tela e o elemento não é coberto, e aguardo antes de clicar. Acontece que quando o modal em que estou clicando é aberto, ele desliza pela página. Dependendo de quando o selênio aguarda amostras reais do DOM, a exceção pode ser lançada se ele capturar o modal enquanto estava em movimento.
Levi Noecker 16/09/16
3

Eu conheci isso porque uma caixa de diálogo de carregamento cobre esse elemento. Simplesmente resolvo adicionando uma espera antes de trabalhar com esse elemento.

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

Espero que esta ajuda!

Huy Hóm Hỉnh
fonte
3

Explicação da mensagem de erro :

A mensagem de erro diz simplesmente que o elemento em que você deseja clicar está presente, mas não está visível. Pode ser coberto por algo ou temporariamente não visível.

Pode haver muitas razões pelas quais o elemento não é visível no momento do teste. Analise sua página novamente e encontre a solução adequada para o seu caso.

Solução para um caso particular :

No meu caso, esse erro ocorre, quando uma dica do elemento da tela em que acabei de clicar, estava aparecendo sobre o elemento que eu queria clicar em seguida. Desfocar era uma solução que eu precisava.

  • Solução rápida como desfocar seria clicar em algum outro elemento em outra parte da tela que não "faça nada". nada acontece após uma ação de clique.
  • A solução adequada seria chamar element.blur()o elemento que aparece na dica de ferramenta, o que faria a dica desaparecer.
Dee
fonte
3

O motivo desse erro é que o elemento no qual você está tentando clicar não está na janela de visualização (região vista pelo usuário) do navegador. Portanto, a maneira de superar isso é rolando primeiro para o elemento desejado e depois executando o clique.

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

Na resposta de Tony Lâmpada, o comentário nº 27 realmente resolveu o problema para mim, exceto que ele fornecia código Java e eu precisava de Python. Aqui está uma função Python que rola para a posição do elemento e clica nela.

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

Isso resolveu o problema para mim no Chrome 34.0. Não causou danos no Firefox 28.0 e IE 11; esses navegadores não estão sujeitos ao problema, mas rolar para a posição do elemento antes de clicar nele ainda não é uma coisa ruim.

Steve Saporta
fonte
2

Talvez não seja uma solução realmente limpa, mas funcione:

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

Eu estava recebendo esse bug porque testei um hover e precisava clicar no link abaixo da dica de ferramenta. A solução foi adicionar page.find('.sp-logo').hoverantes click_linkpara tirar a dica da ferramenta.

Dan Kohn
fonte
2

É engraçado, todo o tempo que passei olhando para as várias respostas, ninguém tentou o óbvio, o que, é claro, eu também não. Se sua página tiver o mesmo ID usado várias vezes, como a minha ((newButton ",)) e a página que você deseja não for a primeira encontrada, é provável que você obtenha esse erro. A coisa mais fácil de fazer (C #):

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

Observe que é FindElements, não FindElement.

E depois teste para ver quantos resultados retornaram da recuperação. Se for o segundo, você poderá usar:

testit[1].Click();

Ou peça a quem reutilizou os IDs para corrigi-los.

CargoMeister
fonte
Se isso ocorre porque existem vários botões com esse ID e apenas um é exibido por vez, uma solução superior envolve o uso do LINQ para encontrar o primeiro elemento visível (anexar .First(x => x.Visible)à chamada FindElements) e clicar nele se não for nulo.
Sean Duggan
2

Depois de testar todas as sugestões mencionadas, nada funcionou. Eu fiz esse código. Funciona, mas não é bonito

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

Faço uma espécie de força bruta de cliques e funciona para mim.

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

Se você jQuerycarregou na página, pode executar o seguinte comando javascript:

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

Exemplo usando o executor python:

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

Eu tive o mesmo problema e foi causado por um conflito de identificação entre a div e o link dentro da div. Então o driver estava clicando na div em vez do link que eu queria. Mudei o ID da div e funcionou corretamente.

Antes:

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

Depois de:

<div id="differentId"><a id="logout" href="logoutLink">logout</a></div>
Jordan Silva
fonte
Não surpreende que isso tenha causado problemas. Deve haver apenas um ID em uma página. Isso foi desenrolar o design ruim, não uma solução alternativa.
Dave Lawrence
1

No Drupal ao usar o selênio :

    // 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
fonte