xPath Text Contém Selenium Web Driver

Oct 27 2020

Estou tentando selecionar um elemento com base em seu conteúdo de texto. Estou usando XPath para fazer isso.

Estou apenas intrigado como isso deve funcionar?

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

Vou até copiar o código 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>

O elemento div contém as palavras "Notificações". Então, por que não funciona.

Vá para esta página no Facebook: https://www.facebook.com/settings

Use esta extensão do Chrome para destacar qualquer área via xPath.

Respostas

DMart Oct 27 2020 at 18:12

Você tem um espaço antes da palavra Notificações:

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

Você também deve adicionar um elemento de espera antes de tentar encontrar o 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

Descobri o problema com a ajuda de algumas pessoas incríveis nesta comunidade.

Ok, então meu elemento estava em um iframe.

Para acessar o elemento, devo primeiro acessar o iFrame

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