xPath Text contiene il driver Web Selenium
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 <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
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')]"));
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);