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());