xPath-Text enthält Selenium-Webtreiber

Oct 27 2020

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&nbsp;<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

DMart Oct 27 2020 at 18:12

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')]")); 
JackTrowbridge Oct 29 2020 at 20:21

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