Selenium/WebDriver驱动IE的XPath解释

5

我正在尝试使用Selenium RC和WebDriver(分别)来操作HTML页面。源代码包含类似以下内容:

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

我想针对包含“Logoff”文本的链接进行定位,即使重新设置span也能正常工作。我使用XPath,因为它应该在WebDriver和Selenium RC中都能正常工作。这在IE中可以工作,但稍微有些脆弱:
//a[contains(., 'ogoff')]

这样做更加健壮,但是不能正常工作:

//a[.='Logoff']

你能解释一下第二个为什么不起作用吗?特别是,.应该如何解释为字符串,并且Selenium和WebDriver如何处理它?

我也在尝试让Selenium与Firefox一起工作,这会带来另一个问题。

2个回答

10

在处理器看来,存在空格(包括空格和回车)会被视为重要的,从而影响到a的计算值。

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

* L
    ogoff
     *

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

*L ogoff*

如果您想选择“Logoff”,您可以使用normalize-space(),然后将其包装在translate()中以删除空格:

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

感谢对空格处理的解释。也许XPath应该有一个缩写语法来处理normalize-space()translate(., ' ',''),因为它们非常有用。 - Bennett McElwee

2

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


是的,在这种情况下,那是最简单的方法。谢谢!(语法是 link=Logoff,不包括引号。) - Bennett McElwee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接