Javascript 如何使用Selenium和Java提取不在自身标记内的文本节点的文本?
我想得到一行文字(例如标准用户)。我该怎么做Javascript 如何使用Selenium和Java提取不在自身标记内的文本节点的文本?,javascript,java,selenium,xpath,css-selectors,Javascript,Java,Selenium,Xpath,Css Selectors,我想得到一行文字(例如标准用户)。我该怎么做 <div id="login_credentials" class="login_credentials"> <h4>Accepted usernames are:</h4> standard_user <br> locked_out_user <br> problem_user
<div id="login_credentials" class="login_credentials">
<h4>Accepted usernames are:</h4>
standard_user
<br>
locked_out_user
<br>
problem_user
<br>
performance_glitch_user<br>
</div>
接受的用户名是:
标准用户
锁定用户
用户问题
性能故障用户
您必须逐行读取文件,并设置一个条件以获取不带标记的行
if(!line.startwith(我会用几行代码来处理文本-
元素和包含部分文本的元素有点棘手:
// first, get all the text by locating div element
string allText = driver.findElement(By.id("login_credentials")).getText();
// then get H4 text so we can remove this string
string textToRemove = driver.findElement(By.xpath("//div[@id='login_credentials']/h4")).getText();
// remove unwanted "Accepted usernames are:" text
string filteredText = allText.Replace(textToRemove, "");
// split filteredText on newline regex so we can get line items including 'standard_user'
string[] textArray = filteredText.split("\\r?\\n");
// get standard_user text by getting first item in the split array
string standardUserText = textArray[0];
这段代码的最后3行可以简化,但我编写了这个较长的版本,这样我们就可以理解每一步中发生的事情
allText
评估后的变量应等于接受的用户名为:标准\用户锁定\用户问题\用户性能\故障\用户
一旦我们删除可接受的用户名是:
出现在h4
元素中的文本,filteredText
等于标准的用户锁定的用户问题用户性能故障用户
,每个项目都用换行符分隔,\r
或\n
字符——我们使用正则表达式来处理both案例
我们在\n
字符上拆分filteredText
,得到如下数组:
[ "standard_user", "locked_out_user", "problem_user", "performance_glitch_user" ]
然后,我们可以调用textary[0]
来获取列表中的第一项,它应该是standard\u user
只需获取div内容并使用一些带换行符的字符串操作即可
String text=driver.findElement(By.cssSelector("div#login_credentials")).getText();
String lines[] = text.split("\\r?\\n");
System.out.println(lines[1]);
收集一个div中包含的所有文本,并用换行符分隔:
WebElement element = driver.findElement(By.id("login_credentials"));
String lines[] = element.getText().split("\n");
System.out.println(lines[1]);
文本标准用户是
节点中具有的文本节点。因此,要提取文本标准用户,可以使用以下任一选项:
- 使用cssSelector:
- 使用xpath:
WebElement element = driver.findElement(By.id("login_credentials"));
String lines[] = element.getText().split("\n");
System.out.println(lines[1]);
System.out.println((String)((JavascriptExecutor)driver).executeScript('return arguments[0].childNodes[2].textContent;', new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div.login_credentials#login_credentials")))));
System.out.println(((JavascriptExecutor)driver).executeScript('return arguments[0].childNodes[2].textContent;', new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='login_credentials' and @id='login_credentials']")))).toString());