web-dev-qa-db-fra.com

Webdriver de sélénium pour trouver la balise d'ancrage et cliquez dessus

<div id="ContentPrimary">
<ul class="selectors modeSelectors">
    <li><a href="/content/l411846326l1213g/references/" title="">
        <span class="selector">References (27)</span></a></li>
    <li><a href="/content/l411846326l1213g/referrers/" title="">
        <span class="selector">Cited By (2)</span></a></li>
    <li><a href="/content/l411846326l1213g/export-citation/" title="">
        <span class="selector">Export Citation</span></a></li>
    <li><a href="/content/l411846326l1213g/about/" title="">
        <span class="selector">About</span></a></li>
</ul>

En cela, je dois trouver et cliquer sur le lien À propos à l'aide de l'API Selenium, mais je n'ai pas pu le faire.

ce que j'ai fait c'est

wait.until(new ExpectedCondition<Boolean>() {
    public Boolean apply(WebDriver webDriver) {
        System.out.println("Searching ...");
        String s = driver.findElement(By.cssSelector("#ContentPrimary ul li[4] span.selector")).getText();
        System.out.println(s);
        if (Pattern.compile(Pattern.quote("About"), Pattern.CASE_INSENSITIVE).matcher(s).find()) {
            return true;
        } else {
            return false;
        }
    }
});
driver.findElement(By.linkText("About")).click();

mais ça ne marche pas

13

D'après mon expérience, l'API Selenium présente de nombreux défauts à cet égard. Ils ne peuvent généralement être surmontés qu'en reformulant vos sélecteurs. Par exemple, vous pouvez essayer d'utiliser un sélecteur XPath pour obtenir votre élément:

driver.findElement(By.xpath("//a[contains(.,'About')]")).click();

De plus, si vous essayez d'utiliser Internet Explorer, il peut être utile de ne pas cliquer sur l'élément, mais plutôt de simuler le fait d'appuyer sur le bouton Entrée. Donc, en supposant que l'élément soit trouvé, vous pouvez essayer ceci:

driver.findElement(By.linkText("About")).sendKeys(Keys.ENTER);
23
devsnd

Vous pouvez utiliser ExpectedConditions :

wait.until(visibilityOfElementLocated(By.linkText("About"))).click();
2
Aleh Douhi