xPath Text Contém Selenium Web Driver
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 <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
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')]"));
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);