xPath-Text enthält Selenium-Webtreiber
Ich versuche, ein Element anhand seines Textinhalts auszuwählen. Ich benutze XPath, um dies zu erreichen.
Ich bin nur verwirrt, wie das funktionieren sollte?
WebElement link = obj.driver.findElement(By.xpath("//div[contains(text(), 'Notifications')]"));
Ich werde sogar den HTML-Code kopieren:
<div class="linkWrap noCount">Notifications <span class="count _5wk0 hidden_elem uiSideNavCountText">(<span class="countValue fsm">0</span><span class="maxCountIndicator"></span>)</span></div>
Das div-Element enthält die Wörter "Notifications". Warum funktioniert es nicht?
Gehen Sie zu dieser Seite auf Facebook: https://www.facebook.com/settings
Verwenden Sie diese Chrome-Erweiterung , um einen beliebigen Bereich über xPath hervorzuheben.
Antworten
Sie haben ein Leerzeichen vor dem Wort Benachrichtigungen:
WebElement link = obj.driver.findElement(By.xpath("//div[contains(text(), 'Notifications')]"));
Sie sollten auch ein Wartezeitelement hinzufügen, bevor Sie versuchen, das Element zu finden:
WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(text(), 'Notifications')]"));
WebElement link = obj.driver.findElement(By.xpath("//div[contains(text(), 'Notifications')]"));
Ich habe das Problem mit Hilfe einiger erstaunlicher Leute in dieser Community gefunden.
Ok, mein Element befand sich in einem iFrame.
Um auf das Element zugreifen zu können, muss ich zuerst auf den iFrame zugreifen
WebElement iframe = obj.driver.findElement(By.xpath("//iframe[@tabindex='-1']"));
obj.driver.switchTo().frame(iframe);