如何为没有标签的元素识别xpath?

时间:2018-08-06 07:41:51

标签: java selenium selenium-webdriver xpath webdriver

我需要唯一地标识一个元素,但是该元素没有任何标签。请帮助您唯一地标识该元素吗?

<div class="mbs2_support ng-binding"><strong>Customer care? </strong>Phone 999 888 777 6</div>

在这里,我只需要识别电话号码列,而无需“客户服务”部分。 突出显示的一个(附有屏幕截图)我需要识别。我尝试按照xpath进行操作,但是它占用了整行(包括客户列)

  • //div[contains(text(), ' Phone 999 888 777 6')]
  • //div[text()[normalize-space()='Phone 999 888 777 6']]

enter image description here

4 个答案:

答案 0 :(得分:1)

“ ...元素没有任何标签” 实际上是不正确的。必需的文本节点是div的子节点。您可以使用下面的JavaScript(使用JavaScriptExecutor)来获取它:

'return document.querySelector("div.mbs2_support").lastChild.textContent;'

答案 1 :(得分:0)

只需提取差异的text()<strong>中的文本就是孙子,因此将不包括在内:

//div[contains(., 'Phone ')]/text()

答案 2 :(得分:0)

您要标识的元素是父标签text Node的子标签<div>

根据您提供的用于提取文本 Phone 999 888 777 6 HTML ,您可以使用executeScript()方法,如下所示:

WebElement myElement = driver.findElement(By.xpath("//div[@class='mbs2_support ng-binding']"));
String myText = ((JavascriptExecutor)driver).executeScript('return arguments[0].lastChild.textContent;', myElement).toString();

答案 3 :(得分:0)

WebElement element = driver.findElement(By.xpath("//div[contains(@class,'mbs2_support')]")); 
String getText = ((JavascriptExecutor)driver).executeScript('return arguments[0].lastChild.textContent;', element).toString();

获取元素并解析字符串。 javascript中的lastChild可以解决问题:https://www.w3schools.com/jsref/prop_node_lastchild.asp