web-dev-qa-db-fra.com

Sélénium - L'élément n'est pas cliquable au point

J'utilise Selenium pour le script de test. Je reçois l'erreur suivante et cette erreur se produit de manière aléatoire. Quand je cours 10 fois, je l’ai deux fois. Donc, ce n'est pas vraiment reproductible. Est-ce que quelqu'un sait pourquoi cela se passe? L'élément sur lequel je tente de cliquer est clairement visible dans le navigateur et ne se déplace pas. Il n'est donc pas nécessaire de redimensionner ou de faire glisser l'élément. J'utilise chrome webdriver et je lis d'autres stratégies de dépannage ( Débogage "erreur [Point n'est cliquable au point" erreur ] et elles ne semblent pas pertinentes pour mon problème. J'ai attendu assez de temps aussi.

UnknownError: unknown error: Element is not clickable at point (167, 403). Other element would receive the click: <div class="leftMasterBackground"></div>
13
haeminish

Vous pouvez effectuer plusieurs étapes pour améliorer la stabilité en cliquant sur différents éléments de l'interface utilisateur:

  • Explicitement attend qu'il soit presence dans le DOM
  • Scroll dans la vue des éléments
  • Vérifiez si cliquable

Est-ce que cela a aidé la stabilité?

WebDriverWait wait = new WebDriverWait(driver, 3)
JavascriptExecutor js = ((JavascriptExecutor) driver)

//presence in DOM
wait.until(ExpectedConditions.presenceOfElement(By.id("ID")));

//scrolling
WebElement element = driver.findElement(By.id("ID")));  
js.executeScript("arguments[0].scrollIntoView(true);", element);

//clickable
wait.until(ExpectedConditions.elementToBeClickable(By.id("ID")));

De plus, si vous décidez de remplacer la valeur par défaut Actions par une interface plus personnalisée, vous pouvez utiliser deux types de clics (par exemple): click() qui comportera toutes les étapes de stabilité et fastClick() qui sera le clic par défaut sans toute varification.

7
Stas

Je faisais également face au même problème avec Chrome. J'ai résolu ce problème en mettant une ligne de code avant de cliquer sur l'élément:

scrollToViewElement(driver,xpath);
2
user6226795

J'ai résolu en attrapant l'exception et en la gérant comme ceci:

        WebDriver driver = new ChromeDriver();
        WebElement element = driver.findElement(By.id("ID"));
        boolean clicked = false;
        do{
            try {
                element.click();
            } catch (WebDriverException e) {
                continue;
            } finally {
                clicked = true;
            }
        } while (!clicked);
2
billi90

cliquez sur l'élément parent de l'élément sur lequel vous souhaitez cliquer. cela peut être une solution de contournement seulement.

1
Balu

J'ai eu le même problème en raison d'un de spinner qui cachait l'élément. 

J'ai donné xpath et cela a résolu le problème. D'autres personnes ont suggéré de 1. faire défiler 2. Sleep a également fonctionné pour elles.

0
dimyo

Cela se produit parfois dans mes scripts Katalon Studio. Ce que j'ai trouvé très efficace, c'est d'utiliser JavaScript pour cliquer sur ces éléments:

@Keyword
def clickUsingJS(TestObject to, int timeout) {

    try {
        WebUI.click(to)
    }
    catch (Exception e) {
        WebDriver driver = DriverFactory.getWebDriver()
        WebElement element = WebUiCommonHelper.findWebElement(to, timeout)
        JavascriptExecutor executor = ((driver) as JavascriptExecutor)
        executor.executeScript('arguments[0].click()', element)
    }
    throw(e)
}

Edit: Voir aussi .

0
Mate Mrše
  • Cela ne se produit que sur le chrome, donc cela fonctionne sur ie et firefox 
  • ChromeDriver clique toujours au milieu de l'élément
  • La raison pour laquelle le pilote Chrome ne calcule pas l'emplacement correct du lien à l'écran.

Solution:

// Find an element and define it

WebElement elementToClick = driver.findElement(By.xpath("some xpath"));
// Scroll the browser to the element's Y position
((JavascriptExecutor) driver).executeScript("window.scrollTo(0,"+elementToClick.getLocation().y+")");
// Click the element
elementToClick.click();
0
Manan Trivedi