2014-09-04 198 views
0

从下面的HTML代码,我想只选择第一跨度类文本..如何排除XPATH嵌套SPAN类

<span class="item_amount order_minibasket_amount order_full_minibasket">10 
    <span class="article">Article 
     <i class="icon"> > 
     </i> 
    </span> 
</span> 

这是我目前XPATH:

//span[contains(@class,'order_minibasket_amount')] 

当我在我的Selenium测试使用此,我得到了整个SPAN TEXT。像:

10 Article > 

我只是想要得到的“10”的文章量..

AMOUNT(new PageElement(By.xpath("//span[contains(@class,'order_minibasket_amount')]/text()[1]"), "not such Element....")) 

    public String getAmount() { 
    return amount = PageObjectUtil.findAndInitElementInside(webElement, PageElements.AMOUNT.pe, amount, String.class); 
} 

提前许多感谢,

干杯, KOKO

回答

0

你可以添加/text()到最后:

//span[contains(@class,'order_minibasket_amount')]/text() 

而是选择span元素节点,这个XPath会选择文本节点集这是直接子节点的span元素。这应该是一组两个节点,一个包含“10”,一个换行符和四个空格(目标范围的开始标记与嵌套范围的开始标记之间的文本),另一个包含仅换行符关闭两个范围的标签。如果你只想第一文本子节点(10,NL,空格),然后使用

//span[contains(@class,'order_minibasket_amount')]/text()[1] 
+0

当我使用这个Xpath“// span [contains(@ class,'order_minibasket_amount')]/text()[1]” - 我得到了我想要的元素。但是我得到了这个错误。由...引起:org.openqa.selenium.InvalidSelectorException:无效的选择器:xpath表达式的结果“// span [contains(@ class,'order_sel_minibasket_amount')]/text()[1]”是:[object Text]。它应该是一个元素。 (会话信息:chrome = 36.0.1985.143) – KoKo 2014-09-04 13:56:18

+0

@KoKo您可以编辑问题以显示您用来执行XPath的代码吗?该表达式是正确的,并且正在返回文本节点,但似乎您使用的API要求仅选择_element_节点。您可能需要分两步进行操作,使用XPath选择元素,然后通过其他API提取文本节点子元素。 – 2014-09-04 14:04:27

+0

@ Ian Roberts - 非常感谢我编辑了我的第一个问题。 – KoKo 2014-09-04 14:22:41

0

现在我使用的变通解决方案......但我不开心它:-(

public String getAmount() { 
    String tempAmount = PageObjectUtil.waitFindAndInitElement(PageElements.AMOUNT.pe).getText(); 
    String output = tempAmount.replaceAll("[a-zA-Z->]", ""); 
    return amount = output.trim(); 
} 

欢呼声, KOKO

1

你想要的东西不能直接完成,你将不得不求助于String操纵。就像:

String completeString = driver.findElement(By.className("item_amount")).getText() 
String endString = driver.findElement(By.className("article")).getText() 
String beginString = completeString.replace(endString, "") 
+0

谢谢,@SiKing,我会尽力而为。 – KoKo 2014-09-05 12:16:53