Selenium*ElementPresent和*XpathCount给出不同的结果?

Selenium*ElementPresent和*XpathCount给出不同的结果?,selenium,Selenium,对于同一定位器,我得到了不同的结果。比如说 //table[@id='foo'] 测试ElementPresent时返回true,但XpathCount时返回0。在Selenium v1.0.10 IDE中,Find按钮突出显示两个功能的正确元素。你知道是什么导致了这一切吗 注: 页面上有框架编辑:这可能就是问题所在。赏金用于验证。 页面上有许多表,但只有一个表的@id为“foo” 火狐3.6 在IDE和Java RC中都发生 使用以下XPath表达式: boolean(//table[@i

对于同一定位器,我得到了不同的结果。比如说

//table[@id='foo']
测试
ElementPresent
时返回true,但
XpathCount
时返回0。在Selenium v1.0.10 IDE中,
Find
按钮突出显示两个功能的正确元素。你知道是什么导致了这一切吗

注:

  • 页面上有框架编辑:这可能就是问题所在。赏金用于验证。
  • 页面上有许多表,但只有一个表的@id为“foo”
  • 火狐3.6
  • 在IDE和Java RC中都发生

使用以下XPath表达式:

boolean(//table[@id='foo'])


如果有一个
元素,其
id
属性的值为
“foo”
,则上面的第一个表达式应求值为
true()
,而上面的第二个表达式应求值为正整数。

使用这些XPath表达式

boolean(//table[@id='foo'])


如果有一个
元素,其
id
属性的值为
“foo”
,则上面的第一个表达式应求值为
true()
,而上面的第二个表达式应求值为正整数。

实际上不是对问题的直接回答,但是,如果您正在阅读本文并希望在元素上循环,那么这是一个解决方法。在for循环中使用
isElementPresent
,如下所示:

for(int i = 2; selenium.isElementPresent("//table[@id='foo']//tr["+i+"]"); i++)
{
    selenium.getText("//table[@id='foo']//tr["+i+"]//td["+columnNum+"]");
}

请注意,我从2开始,因为XPath是从1开始索引的,我们希望跳过标题

这并不是对问题的直接回答,而是一种解决方法,如果您正在阅读本文并希望在元素上循环。在for循环中使用
isElementPresent
,如下所示:

for(int i = 2; selenium.isElementPresent("//table[@id='foo']//tr["+i+"]"); i++)
{
    selenium.getText("//table[@id='foo']//tr["+i+"]//td["+columnNum+"]");
}

请注意,我从2开始,因为XPath是从1开始索引的,我们想跳过标题。好吧,这不是验证,更不是非验证

我使用Selenium测试带有框架的GUI。要使isElementPresent和getXpathCount正常工作,我必须首先使用selectFrame选择一个帧(甚至要使isElementPresent正常工作)。仅仅打开一个URL,似乎根本没有选择任何框架

这是HTML和相应的selectFrame代码的外观:

<frameset id="mainframeset"><frame name="nav" id="nav" src....

selenium.selectFrame("nav");

好吧,这不是验证,更不是非验证

我使用Selenium测试带有框架的GUI。要使isElementPresent和getXpathCount正常工作,我必须首先使用selectFrame选择一个帧(甚至要使isElementPresent正常工作)。仅仅打开一个URL,似乎根本没有选择任何框架

这是HTML和相应的selectFrame代码的外观:

<frameset id="mainframeset"><frame name="nav" id="nav" src....

selenium.selectFrame("nav");

什么是XML文档(请提供一个完整但最少的示例)?我没有看到XPath表达式中要引用的任何
元素present
元素。这些“双重功能”是什么?你把我弄糊涂了@Dimitre-让我澄清一下,这是针对Selenium测试框架()的,因此XML是一个HTML页面,
ElementPresent
XpathCount
函数是Selenium函数。这可能与这个bug@jasso有关吗?我实际上使用的是firefox(更新的Q),XPath中没有href,但是谢谢你的链接。这个错误似乎是同一个问题,并表明框架可能是问题所在:什么是XML文档(请提供一个完整但最少的示例)?我没有看到XPath表达式中要引用的任何
元素present
元素。这些“双重功能”是什么?你把我弄糊涂了@Dimitre-让我澄清一下,这是针对Selenium测试框架()的,因此XML是一个HTML页面,
ElementPresent
XpathCount
函数是Selenium函数。这可能与这个bug@jasso有关吗?我实际上使用的是firefox(更新的Q),XPath中没有href,但是谢谢你的链接。这个错误似乎是同一个问题,并表明框架可能是问题所在:迪米特,我认为你不理解上下文。这是使用Selenium,其中函数名是
verifyElementPresent
assertElementPresent
assertXpathCount
storeXpathCount
,等等。我遇到的问题是
*ElementPresent
true
,但是
*XpathCount
正在录制
0
@Adam:我确实理解上下文,很明显您在使用这两个Selenium函数时遇到了问题。正是由于这个原因,我给你两个XPAth表达式来代替这些函数,这样就完全消除了你的问题。我已经解决了您的问题,消除了它。也许我不明白如何使用Selenium中的XPath函数
selenium.getEval(“count(//table[@id='foo']///tr)”)
为语法错误抛出一个
SeleniumException
,这可能不可能吗@Adam:我不知道Selenium,但大多数XPath引擎通常提供一种方法来计算任何XPath表达式,包括不返回节点或节点集的表达式。阅读Selenium文档并找到正确的方法。Dimitre,我认为您不理解上下文。这是使用Selenium,其中函数名是
verifyElementPresent
assertElementPresent
assertXpathCount
storeXpathCount
,等等。我遇到的问题是
*ElementPresent
true
,但是
*XpathCount
正在录制
0
@Adam:我确实理解上下文,很明显您在使用这两个Selenium函数时遇到了问题。正是由于这个原因,我给你两个XPAth表达式来代替这些函数,这样就完全消除了你的问题。我已经解决了您的问题,消除了它。也许我不明白如何使用Selenium中的XPath函数
selenium.getEval(“count(//table[@id='foo']///tr)”)
抛出一个