如何通过XPath从同一父节点内的文本节点中提取文本

时间:2018-05-22 05:05:18

标签: java selenium selenium-webdriver xpath webdriver

我正在使用Java中的Selenium运行一些UI测试,从UI中获取文本片段,以进行一些自动化测试。

我的UI上有以下元素:

<span id="MainContent" class="control-label">
    "Text 1"
    <br>
    "Text 2"
    <br>
    "Text 3"
</span>

我需要单独挑出3个单独的文本中的每一个,并单独对每个文本进行断言。

我的定位器有问题,因为当我运行测试时,selenium告诉我无法定位元素。

对于第一个文本项(“Text 1”),我使用了以下无法正常工作的定位器代码。我已经尝试了其他一些变种,但总是无法找到定位器错误。救命啊!

By category = By.xpath("//span[@id='MainContent'][1]");

2 个答案:

答案 0 :(得分:2)

根据您提供的用于提取文本的HTML,例如文字1 文字2 文字3 您可以使用以下解决方案:

WebElement myElement = driver.findElement(By.xpath("//span[@class='control-label' and @id='MainContent']"));
// to extract the text "Text 1"
String myText1 = ((JavascriptExecutor)driver).executeScript('return arguments[0].firstChild.textContent;', myElement).toString();
// to extract the text "Text 2"
String myText2 = ((JavascriptExecutor)driver).executeScript('return arguments[0].childNodes[3].textContent;', myElement).toString();
// to extract the text "Text 3"
String myText3 = ((JavascriptExecutor)driver).executeScript('return arguments[0].lastChild.textContent;', myElement).toString();

答案 1 :(得分:1)

技术上没有3个元素,技术上有一个元素。您可以做的是获取文本并根据分隔符将其拆分。

By category = By.xpath("//span[@id='MainContent']") ;

String allText = driver.findElement(category).getText();

String[] allTextArray = allText.split("<br>");

String text1 = allTextArray[0];
String text2 = allTextArray[1];
String text3 = allTextArray[2];