xPath Text contiene il driver Web Selenium

Oct 27 2020

Sto cercando di selezionare un elemento in base al suo contenuto di testo. Sto usando XPath per raggiungere questo obiettivo.

Sono solo perplesso come dovrebbe funzionare?

WebElement link = obj.driver.findElement(By.xpath("//div[contains(text(), 'Notifications')]")); 

Copierò anche il codice HTML:

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

L'elemento div contiene le parole "Notifiche" al suo interno. Allora perché non funziona.

Vai a questa pagina su Facebook: https://www.facebook.com/settings

Usa questa estensione di Chrome per evidenziare qualsiasi area tramite xPath.

Risposte

DMart Oct 27 2020 at 18:12

Hai uno spazio prima della parola Notifiche:

WebElement link = obj.driver.findElement(By.xpath("//div[contains(text(), 'Notifications')]"));    

Dovresti anche aggiungere un elemento di attesa prima di provare a trovare l'elemento:

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

Ho trovato il problema con l'aiuto di alcune persone straordinarie in questa comunità.

Ok, quindi il mio elemento era in un iFrame.

Per accedere all'elemento, devo prima accedere all'iFrame

WebElement iframe = obj.driver.findElement(By.xpath("//iframe[@tabindex='-1']"));
    
obj.driver.switchTo().frame(iframe);