繁体   English   中英

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

[英]In Selenium Webdriver, how to get a text after an element?

我想得到一个完全出现在特定元素之后的文本。 请查看示例代码:

<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>之后。 通过使用此xpath:

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

Java给了我一个错误,因为输出不是一个web元素,而是一个文本。 因此,不可能使用findElement。

有什么想法如何以干净的方式得到这个文本? 我的意思是我不想得到所有文本:(在这种情况下)submitter \\ nsubmitter@asd.com \\ nasdas然后提取所需的文本。

我认为在Account之后没有直接提取文本的方法:即xpath直接引用text ='asdas'

因此,不要试图直接读取text ='asdas',而是尝试读取p标签中的每个文本并执行如下操作来提取标签。

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

// xpath 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

希望这对你有所帮助

您可以使用一段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);

希望这完美无缺。 如果没有那么请在span类前添加div类。

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

要获取文本,例如asdas恰好在<span>使用innerText作为帐户,您可以使用以下代码行:

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

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

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

你的xpath可以是: -

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM