簡體   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