在Selenium Webdriver中,如何在元素后获得文本?

bwitn5fc  于 2022-11-24  发布在  其他
关注(0)|答案(5)|浏览(276)

我想得到一个文本,它正好出现在一个特定的元素之后。请看下面的示例代码:

<div id="content-tab-submitter" class="">
    <h4>Sender</h4>
    <p>
        <span class="screenHidden">Name: </span>
        submitter
        <br>

        <span class="screenHidden">E-mail address:</span>
        submitter@asd.com
        <br>

        <span class="screenHidden">Account: </span>
        asdas
        <br>
    </p>
</div>

我想获取紧跟在<span>后面的包含“Account”的文本。通过使用以下XPath表达式:

//*[@id='content-tab-submitter']/p/span[contains(text(),'Account')]/following::text()

Java给了我一个错误,因为输出不是web元素,而是文本。所以,不可能使用findElement。
我怎样才能以一种干净的方式得到这个文本?我的意思是我不想得到所有的文本(在这种情况下):submitter\nsubmitter@asd.com\nasdas,然后提取所需的文本。

6mzjoqzu

6mzjoqzu1#

我认为没有任何直接的方法可以提取Account后面的文本:即直接引用text =“asdas”的XPath表达式。
因此,不要尝试直接读取text = 'asdas',而是尝试读取 p 标记中的每一个文本,并执行如下操作来提取标记。

WebDriver driver = new FirefoxDriver();
driver.get("file:///C:/Users/rajnish/Desktop/myText.html");

// XPath expression for talking complete text i.e all text inside every span tag that comes under p tag
String MyCompleteText  = driver.findElement(By.xpath("//*[@id='content-tab-submitter']/p")).getText();

System.out.println("My Complete Text is: " + MyCompleteText);

// MyCompleteText outputs in console:
// My Complete Text is: Name: submitter
// E-mail address: submitter@asd.com
// Account: asdas

// Now we have to split our MyCompleteText on the basis of Account:
// as we want text after Account: so do it like below

String[] mytext = MyCompleteText.split("Account:");
System.out.println("I am text after  Account: "+ mytext[1]);

输出结果如下:

My Complete Text is: Name: submitter
E-mail address: submitter@asd.com
Account: asdas
I am text after  Account:  asdas
0tdrvxhp

0tdrvxhp2#

您可以使用一段JavaScript代码来获取以下文本节点:

// Get the targeted element
WebElement element = driver.findElement(By.cssSelector("id('content-tab-submitter')/p/span[contains(.,'Account')]"));

// Get the following text
String text = (String)((JavascriptExecutor)driver).executeScript(
    "return arguments[0].nextSibling.textContent.trim()", element);
zbdgwd5y

zbdgwd5y3#

若要取得文字(例如,asdas),它正好出现在<span>之后,innerText为Account,您可以使用下列程式码行:

// Identify the parent node
WebElement myElement = driver.findElement(By.xpath("//div[@id='content-tab-submitter']//p"));

String myText = ((JavascriptExecutor)driver).executeScript('return arguments[0].childNodes[8].textContent;', myElement).strip()
// or
String myText = ((JavascriptExecutor)driver).executeScript('return arguments[0].childNodes[10].textContent;', myElement).strip()
8iwquhpp

8iwquhpp4#

我希望这能完美地工作。如果不能,那么请在 span 类前面添加一个 div 类。

//span[@class='screenHidden'][contains(., 'submitter')][contains(., 'submitter@asd.com')][contains(., 'asdas')]
2sbarzqh

2sbarzqh5#

您可以使用Selenium的getText()方法,例如:

driver.findElement(By.xpath("XPath expression of the element")).getText();

XPath表达式可以是:

//span[contains(.,'Account')]/following::text()

相关问题