Текст xPath содержит веб-драйвер Selenium
Oct 27 2020
Я пытаюсь выбрать элемент на основе его текстового содержимого. Для этого я использую XPath.
Я просто озадачен, как это должно работать?
WebElement link = obj.driver.findElement(By.xpath("//div[contains(text(), 'Notifications')]"));
Я даже скопирую 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>
В элементе div есть слова «Уведомления» внутри. Так почему это не работает?
Перейдите на эту страницу в Facebook: https://www.facebook.com/settings
Используйте это расширение Chrome, чтобы выделить любую область через xPath.
Ответы
DMart Oct 27 2020 at 18:12
Перед словом Уведомления стоит пробел:
WebElement link = obj.driver.findElement(By.xpath("//div[contains(text(), 'Notifications')]"));
Вы также должны добавить элемент wait for, прежде чем пытаться найти элемент:
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
Я нашел проблему с помощью замечательных людей в этом сообществе.
Итак, мой элемент был в iFrame.
Чтобы получить доступ к элементу, я должен сначала получить доступ к iFrame
WebElement iframe = obj.driver.findElement(By.xpath("//iframe[@tabindex='-1']"));
obj.driver.switchTo().frame(iframe);