Как получить следующее текстовое имя, используя xpath? - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь использовать следующий xpath

driver.findElement(By.xpath("//div[contains(@class,'ReactTags__selected')]//span[1]/text()"));

, но получаю следующую ошибку

"org.openqa.selenium.InvalidSelectorException: invalid selector: Результат выражения xpath" / / div [содержит (@ class, 'ReactTags__selected')] // span [2] / text () "is: [объект Text]. Это должен быть элемент."

<div class="ReactTags__selected">
        <span class="tag-wrapper ReactTags__tag" style="opacity: 1; cursor: auto;" draggable="true">
        "TestName"
        <a class="ReactTags__remove">×</a>
        </span>
</div>

Ответы [ 3 ]

0 голосов
/ 12 марта 2020

text() в xpath возвращает текстовый узел, Selenium не поддерживает его. Найдите элемент и используйте getText(), чтобы получить текст

WebElement element = driver.findElement(By.xpath("//div[contains(@class,'ReactTags__selected')]//span[1]"));
String text = element.getText();
0 голосов
/ 13 марта 2020

Поскольку родительский элемент содержит атрибут draggable="true", это неизменно динамический c элемент, а именно React элемент. Кроме того, так как текст TestName является Текстовым узлом , вам нужно вызвать WebDriverWait для visibilityOfElementLocated(), и вы можете использовать любую из следующих Стратегий локатора :

  • cssSelector:

    System.out.println(((JavascriptExecutor)driver).executeScript('return arguments[0].firstChild.textContent;', new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div.ReactTags__selected > span.tag-wrapper.ReactTags__tag")))).toString());
    
  • xpath:

    System.out.println((String)((JavaScriptExecutor)driver).executeScript("return arguments[0].firstChild.textContent;", new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='ReactTags__selected']/span[@class='tag-wrapper ReactTags__tag']")))));
    
0 голосов
/ 12 марта 2020

Пожалуйста, попробуйте ниже Xpath.

Надеюсь, это поможет

//div[contains(@class,'ReactTags__selected')]//span[2]/a/text()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...