1
votes

Automatisation de Span avec Selenium et Java 13

J'automatise un site Web en utilisant du sélénium en Java.

Exception in thread "main" org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element <span>...</span> is not clickable at point (122, 877). Other element would receive the click: <div class="nc_wrapper swp_floating_horizontal_wrapper bottom" style="background-color: rgb(255, 255, 255);">...</div>
 (Session info: chrome=77.0.3865.90)
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:48'
System info: host: 'Sanjeevans-iMac.local', ip: '169.254.10.5', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.14.6', java.version: '13'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 77.0.3865.90, chrome: {chromedriverVersion: 76.0.3809.126 (d80a294506b4..., userDataDir: /var/folders/k2/8cltlrwj23n...}, goog:chromeOptions: {debuggerAddress: localhost:59693}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: MAC, platformName: MAC, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}
Session ID: 02cb57fb86be956e5e10be634b5724b1

    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)

    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)

    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)

    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)

    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)

    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)

    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)

    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)

    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:285)

    at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:84)

    at bigboss.A.main(A.java:49)

Pour ce bouton, j'ai besoin d'automatiser un clic dans Selenium. Je fais en suivant mais je ne travaille pas.

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='css-vote-button pds-vote-button' and starts-with(@id, 'pd-vote-button')]/span[text()='Vote']"))).click();

Pouvez-vous suggérer quel est le problème?

Après

WebElement click = driver.findElement(By.id("pd-vote-button10359300"));
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", click);


3 commentaires

Pouvez-vous signaler l'erreur que vous obtenez?


Aucune erreur lors de l'obtention, mais pas cliquable


J'ai lu "automatiser le spam"


4 Réponses :


0
votes

Pourquoi ne faites-vous pas ce qui suit pour cliquer?

WebElement click = driver.findElement(By.id("pd-vote-button10359300"));
click.click()


0 commentaires

0
votes

Votre identifiant est peut-être en cours de modification. Essayez sous xpath.

WebElement click = driver.findElement(By.xpath("//a[@class='css-vote-button pds-vote-button']/span[text()='Vote']"));
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", click);

Code:

//a[@class='css-vote-button pds-vote-button']/span[text()='Vote']


0 commentaires

1
votes

Pour cliquer () sur l'élément, vous devez induire WebDriverWait pour elementToBeClickable () et vous pouvez utiliser l'un des éléments suivants: Stratégies de localisation :

  • cssSelector :

    ((JavascriptExecutor) driver).executeScript("arguments[0].click();", new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='css-vote-button pds-vote-button' and starts-with(@id, 'pd-vote-button')]/span[text()='Vote']"))));
    
  • xpath :

    ((JavascriptExecutor) driver).executeScript("arguments[0].click();", new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.css-vote-button.pds-vote-button[id^='pd-vote-button']>span"))));
    

Update

Comme alternative, vous pouvez utiliser la méthode executeScript () comme suit:

  • cssSelector :

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='css-vote-button pds-vote-button' and starts-with(@id, 'pd-vote-button')]/span[text()='Vote']"))).click();
    
  • xpath :

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.css-vote-button.pds-vote-button[id^='pd-vote-button']>span"))).click();
    

Remarque : Comme vous utilisez java.version: '13' , il convient de mentionner qu'il existe des problèmes de compatibilité entre Selenium et / et vous pouvez trouver les discussions détaillées dans:


tl;dr


3 commentaires

@ Ruban4Axis Mettez à jour la question avec l'erreur stacktrace s'il vous plaît


Vérification Bro mis à jour


@ Ruban4Axis Consultez la réponse mise à jour et faites-moi savoir le statut.



1
votes

Vous obtenez une erreur ElementClickInterceptedException , ce qui signifie qu'un autre élément de la page chevauche l'élément sur lequel vous essayez de cliquer. Vous devrez soit interagir avec la page pour éviter que l'élément qui se chevauche ne se chevauche, soit utiliser JavaScript pour à la fois cliquer sur l'élément et déclencher un événement "clic".

De nombreux sites Web ont des éléments de navigation de page qui défilent avec l'utilisateur, donc quelque chose comme un en-tête de navigation flottant peut gêner l'élément sur lequel vous souhaitez cliquer. DebanjanB a une bonne solution comme prochaine étape pour résoudre ce problème, mais je suppose que vous obtiendrez une TimeoutException en attendant que l'élément soit cliquable.

Vous devrez probablement regarder ce test automatisé s'exécuter, puis jouer avec la page après l'échec du test avant de découvrir comment résoudre ce problème.


0 commentaires