2009-09-18 40 views
5

我使用Selenium RC与Chrome模式的Firefox来自动化Web应用程序的测试用例。我正在使用TestNG框架和Eclipse编写Java脚本。现在的主要观点:Selenium RC在XPath中遇到问题

我遇到了Selenium RC用于识别某些XPath的问题。我使用适用于Firefox的XPath-Checker扩展来验证我的XPath,并显示没有错误。然后我在Selenium IDE中试用它来确保XPath被识别。即使IDE识别该元素。但它的硒钢筋混凝土只是不承认它。有什么我可以做的纠正这一点?

具体来说,我想点击给出一个特定区域:

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.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> 

感谢您寻找到这样的负载。 :-)

+0

你能发布你的Selenium RC命令吗?您是否在发送点击命令之前等待页面加载? – 2009-09-18 11:56:16

回答

6

我不知道这是否是正确的有一个标题属性的div中。是不是有你可以用它来查找元素的另一个属性?

总之,这里的定位器的CSS版本,在情况下,它的工作原理:

css=div[title='Automated User'] 
+0

谢谢你的答案!使用CSS是非常好的!我错误地尝试CSS为css = div [@ title ='Automated User'] - 愚蠢的我! – Mugen 2009-09-18 13:21:26

+0

很高兴看到它的工作:) – Santi 2009-09-18 13:35:06

0

确定该页面与RC正确加载,即你看到浏览器中打开和网页加载?

+0

谢谢你回复杰里米。是的,我可以看到页面正确打开。其他领域的XPath似乎工作正常。它在一个它根本不会认识的特定领域。 单击此特定区域中的不同元素会对页面中的另一个div进行一些更改。这可能与问题有关吗? – Mugen 2009-09-18 12:53:44

2

我们在Firefox上运行Selenium测试时曾经与XPath表达式的问题。

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

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

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 
+0

谢谢我的div不是实际的目标“它没有响应”必须让硒按嵌套标记:-) – Blundell 2011-06-13 13:48:13

0

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

就像xpath.try这似乎nothg worng这可能会帮助你。