Selenium RC遇到XPath问题

时间:2009-09-18 11:24:47

标签: xpath selenium selenium-rc

我正在使用带有Chrome模式的Selenium RC for Firefox来自动化Web应用程序的测试用例。我正在使用TestNG框架和Eclipse编写Java脚本。现在到了重点:

我遇到了Selenium RC用于识别某些XPath的问题。我用Firefox的XPath-Checker扩展验证了我的XPath,它没有显示任何错误。然后我在Selenium IDE中试用它以确保XPath被识别。甚至IDE也能识别元素。但它的Selenium RC只是没有认识到它。我能做些什么来纠正这个问题吗?

具体来说,我试图点击一个特定的区域:

html/body/form/div[@id='someid1']/div[@class='someClass']/div[@id='someid2']/div[@id='someid3']/div[@id='someid4']/div[@title='titleOfTheElement']

然后我也试过了:

//div[@title='titleOfTheElement']
xpath=//div[@title='Automated User']
xpath=/descendant::div[@title='Automated User']

仍然没有!

1)有人可以建议可能出现的问题,或者知道Selenium是否存在XPath问题?

2)是否有任何插件(类似于XPath检查器)可以帮助我们按照Selenium RC看到的方式查看内容?这样我们可以确定RC是否会识别XPath。

谢谢,
无限

以下是Selenium代码:

selenium.click("somelink");
selenium.waitForPageToLoad("30000");

boolean flag=false
  do{
    if (selenium.isTextPresent("Some text on the page which loads last"))
    {
      flag=true
    }
  }while(flag=false);


selenium.click("locator for area which is driving me crazy");

现在在最后一步,如果我要点击页面上的任何其他位置(意味着其他一些定位器),点击就可以了。

该区域的HTML如下所示:

<div id="someid1" style="overflow: hidden;">
<div id="someid2" title="title1" class="someclass">title1</div>
<div id="someid3" title="title2" class="someclass">title2</div>
<div id="someid4" title="required title" class="someclass">required title</div>
<div id="someid5" title="title3" class="someclass">title3</div>
<div id="someid6" title="title4" class="someclass">title4</div>
<div id="someid7" title="title5" class="someclass">title5</div></div>

感谢您对此进行调查。 : - )

5 个答案:

答案 0 :(得分:6)

我不确定拥有title属性的div是否正确。是否有可用于定位元素的其他属性?

无论如何,这是定位器的css版本,以防它起作用:

css=div[title='Automated User']

答案 1 :(得分:2)

在Firefox上运行Selenium测试时,我们曾遇到过XPath表达式问题。

  • 您是否尝试过使用不同的浏览器运行相同的测试?
  • 我记得我们用星号(*)替换了所有元素名称,这有帮助。即。

    // * [@ id中= 'someid1'] / * [@类= 'SomeClass的'] / * [@ ID = 'someid2']

答案 2 :(得分:2)

从您的示例中,您应该能够使用目标元素的ID:

selenium.click("id=someid4");

虽然我怀疑ID是动态生成的,但您无法使用此方法。

我看不出以下xpath不起作用的原因:

selenium.click("//div[@title='required title']");

目标的其他方法是:

selenium.click("css=div[title='required title']");
selenium.click("css=.someclass:nth-child(4)"); //must be 4th child of parent element

div是你的实际目标元素吗?它是否响应点击事件?如果有一个子元素响应了点击,那么你需要将其作为目标。此外,您可以尝试使用以下命令进行故障排除:

mouseDown
mouseUp
fireEvent

答案 3 :(得分:0)

您确定使用RC正确加载页面,即您是否看到浏览器打开并且页面加载?

答案 4 :(得分:0)

你的脚本可能比网页更快。所以试着等一段时间。 就像你可以使用waitForCondition("selenium.isElementPresent("ElementID")","20000");

一样

看起来似乎没有xpath.try,这可能对你有帮助。