为什么通过Xpath的selenium定位元素在IE中失败了,但它在firefox中工作了吗?

时间:2010-12-12 08:48:57

标签: junit selenium selenium-rc xpath

我在firefox中运行了我的selenium自动化测试脚本,效果很好。 现在我想在IE中运行脚本,它似乎在在GUI中定位元素的步骤失败。似乎selenium无法在GUI中找到元素,而firefox可以轻松找到它。 / p>

String servicenameidtext = "//table[@id='release_hostsProcesses_list']/tbody/tr[2]/td[1]/td";
Selenium.getText(servicenameidtext );

实际上,脚本是由selenium-IDE记录的,我检查了Xpath,我认为该元素没有问题。 但是为什么硒在IE中的这一步失败了?

谁能告诉我原因?在IE中运行测试时如何解决问题? 非常感谢!

我想通过

从GUI找到元素“alarmlm”

String servicenameidtext =“// table [@ id ='release_hostsProcesses_list'] / tbody / tr [2] / td [1] / td”;

P.S:  The html of the part:
<tbody><tr class="form-title"><td colspan="3"><a href="javascript:void(0);" onclick="javascript:ChangeVisibility( 'release_hostsSoftwareInformation' ); return false;"><img src="img/minus.png" title="-" alt="-"></a>&nbsp;<b>Software Information</b>
</td></tr><tr><td><div id="release_hostsSoftwareInformation_internal">
<table id="release_hostsProcesses_list" border="0" width="100%" class="Processes_list"><tbody>
<tr class="title-column"><td><b>Service Name</b></td><td><b>Summary</b></td><td><b>Description</b></td><td><b> Version </b></td><td><b>Release</b></td><td colspan="2"><b>Installation Date</b></td></tr><tr><td>alarmlm</td><td>mpm</td><td>MultiPlatformManagement tools</td><td>4.0.12</td><td>5</td><td>Wed 10 Nov 2010 04:23:52 AM CST</td></tr><tr><td>annlabclient</td><td>Annlab Client</td><td>Annlab Client</td><td>5.0.13</td><td>23</td><td>Wed 10 Nov 2010 04:23:57 AM CST</td></tr><tr><td>annlabserver</td><td>Annlab Server</td><td>Annlab Server</td><td>5.0.13</td><td>23</td><td>Wed 10 Nov 2010 04:23:57 AM CST</td></tr><tr><td>recoveryalarmlm</td><td>mpm</td><td>MultiPlatformManagement tools</td><td>4.0.12</td><td>5</td><td>Wed 10 Nov 2010 04:23:52 AM CST</td></tr><tr><td>recoverystatlm</td><td>mpm</td><td>MultiPlatformManagement tools</td><td>4.0.12</td><td>5</td><td>Wed 10 Nov 2010 04:23:52 AM CST</td></tr><tr><td>mrfctrl</td><td>MRF Controller</td><td>mrfctrl - including sipproxySubsystem</td><td>1.4.0.5</td><td>1</td><td>Wed 10 Nov 2010 04:24:00 AM CST</td></tr></tbody></table></div></td></tr></tbody>

感谢所有人,问题解决了。原因是:firefox和IE中的html不一样。奇怪。

4 个答案:

答案 0 :(得分:2)

也许,由于默认的命名空间?

错误说明在您未向我们展示的数据中 - 如何提供(x)Html文本?

<强>更新

现在OP提供了源(x)Html文档。提供的XPath表达式:

//table[@id='release_hostsProcesses_list']/tbody/tr[2]/td[1]/td

不会选择所需的元素只是因为td永远不是另一个td的孩子,,但这正是此XPath表达式所寻求的 - 它结束于:

td[1]/td

答案 1 :(得分:1)

你可以尝试通过将/ text()附加到xpath表达式来检查IE中文本值是什么。也许它找到空字符串?

String servicenameidtext = "//table[@id='release_hostsProcesses_list']/tbody/tr[2]/td[1]/td/text()";
alert("found:"  + servicenameidtext);

我的两分钱,

答案 2 :(得分:1)

尝试在id字段中使用所有小写字符:

String servicenameidtext = "//table[@id='release_hostsprocesses_list']/tbody/tr[2]/td[1]/td";
Selenium.getText(servicenameidtext );

应该同时适用于FF和IE

答案 3 :(得分:0)

在这个案例中,我们可以做一件事

检查Internet Explorer的元素IE Developer Tools可用于FireFox Firebug

我们可以比较两个Inspections从IE Developer Tools获取对象的XPath / CSS。

使用和检查它是否在IE和FF中都有效

如果它工作正常,否则我们可以根据浏览器使用相应的XPath。