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);
}
如何从 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);
}