Selenium Webdriver (Java) - 从 css 选择器中排除特定标签

Selenium Webdriver (Java) - exclude a particular tag from the css selector

如何从 css 选择器中排除标签。我有下面的 html 代码:

<div class="info">
    <h3>Test 1</h3>
    John Smith
</div>

我需要 getText() 只为 John Smith 而不是 <h3>

下面的语句是 return 全文测试 1 John Smith:

String txtFix = new WebDriverWait(Login.driver, 100).until(ExpectedConditions.visibilityOfElementLocated
                (By.cssSelector(".info"))).getText();

是否可以使用 css 选择器以某种方式只获得 John Smith?

这是 selenium 的 "classic" 问题,因为 CSS 选择器或 xpath 表达式必须始终引用实际元素 - 您无法直接获取文本节点。

您在这里可以做的是:

  • 获取 div 元素的文本
  • 获取 h3 元素的文本
  • div 元素的文本中删除 h3 元素的文本

实施:

String div = new WebDriverWait(Login.driver, 100).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".info"))).getText();
String h3 = div.findElement(By.tagName('h3')).getText();
String txtFix = div.replace(h3, '');

如果您使用以下方式获取文本:

driver.findElement(By.cssSelector(".info")).getText();

它 returns 如下:

Test 1
John Smith

如果你没看错,在 Test 1 之后,引入了字符 \n,因此 John Smith 在另一行。

因此,如果您只想检索 John Smith,可以使用 split 来实现,如下所示:

String text = driver.findElement(By.cssSelector(".info")).getText().split("\n")[1];
JavascriptExecutor jse = (JavascriptExecutor) driver;       
       if (jse instanceof WebDriver) {
           String text = jse.executeScript("document.getElementByClassName("info").nextSibling";");
           System.out.println(text);
       }