2011-05-04 116 views
5

我试图使用Selenium RC和WebDriver(单独)来操作HTML页面。源包含类似:由Selenium/WebDriver驱动的XPath解释IE

<a href="/logoff"><span> 
    <span>L</span> 
    ogoff 
    </span> 
</a> 

我想针对包含文本“注销”,以这样的方式,如果他们返工跨度它仍然可以工作,甚至链接。我使用的是XPath,因为它可以在WebDriver和Selenium RC中使用。这在IE,但稍微脆弱:

//a[contains(., 'ogoff')] 

,这将是更稳健但不工作:

//a[.='Logoff'] 

你能解释为什么第二不起作用?尤其是,.应该如何解释为一个字符串,Selenium和WebDriver如何做到这一点?

我想让Selenium和Firefox一起工作,这样会打开另一个蠕虫水壶。

回答

10

处理器将空白(空格和回车)视为重要并影响a的计算值。

当您选择这样的*<xsl:value-of select="a"/>*a值的结果是:

* L 
    ogoff 
    * 

如果使用*<xsl:value-of select="normalize-space(a)"/>*结果:

*L ogoff* 

如果你希望能够选择“注销”,您可以使用normalize-space(),然后用translate()将其包装以除去空格:

//a[translate(normalize-space(), ' ','')='Logoff'] 
+0

+1很好的解释。 – 2011-05-04 17:12:21

+0

感谢您解释空白处理。也许XPath应该有一个'normalize-space()'和'translate(。,'','')''的缩写语法,因为它们非常有用。 – 2011-05-04 23:17:13

2

对于Selenium,您可以将其设置为link="Logoff"其中,Logoff是链接中的文本。

+0

是的,这是最简单的方法。谢谢! (语法是'link = Logoff'没有引号。) – 2011-05-04 23:15:26

+0

它可以工作,但它不是XPath实现 – Ardesco 2011-05-09 12:54:49