2010-11-25 72 views
1

我的问题很简单。我正在编写一个必须与IE7兼容的Selenium测试。我有几排3列HTML表:IE7中禁用输入的XPath表达式。用硒测试

列1 - 包含一个复选框

2列 - 包含一个链接

第3栏 - 包含一些自由文本

一(并且只有一个)表格中的复选框被禁用。我的任务是找到并点击禁用复选框旁边的链接(在禁用复选框的行上)。在Firefox中这个简单的XPath表达式做工精细:

//tr/td/input[@disabled]/../../td[2]/a 

//tr/td/input[@disabled='disabled']/../../td[2]/a 

但在IE7中第一个表达式点击最上面一行不管该复选框被启用或禁用,第二个是行不通的。

由于HTML文档很长我把下面的重要组成部分(如图FF):

<tr> 
    <td class="table_detail w e s center"> 
     <input name="Delete_kG0KCgAMniwAAAEsxxgeUH0G" type="checkbox"> 
    </td> 
    <td class="table_detail e s"> 
     <a href="..." class="table_detail_link">000000</a> 
    </td> 
    <td class="table_detail e s"> 
     some text 
    </td> 
</tr> 

<tr> 
    <td class="table_detail w e s center"> 
     <input name="Delete_hooKCgAMi5AAAAEsFnQeUH0G" type="checkbox"> 
    </td> 
    <td class="table_detail e s"> 
     <a href="..." class="table_detail_link">111111</a> 
    </td> 
    <td class="table_detail e s"> 
      &nbsp; 
    </td> 
</tr> 

<tr> 
    <td class="table_detail w e s center"> 
     <input disabled="disabled" type="checkbox"> 
    </td> 
    <td class="table_detail e s"> 
     <a href="..." class="table_detail_link">400086</a> 
    </td> 
    <td class="table_detail e s"> 
     &nbsp; 
    </td> 
</tr> 

最后一个环节,应点击:

<a href="..." class="table_detail_link">400086</a> 

我们使用JUnit 3中的Java Selenium API测试。测试是这样的:

public void testSomething() 
{ 
    ... 
    selenium.click("//tr/td/input[@disabled]/../../td[2]/a"); 

    //wait to load and then test something on the page that is opened. 
    ... 
} 

这适用于FF但不适用于IE7。在IE7中,它会单击第一行上的链接,就好像禁用被忽略一样。它也评估正确的XPather(FF插件)。

我将不胜感激您的帮助。

谢谢!

+0

@ user520359:这可能无关的XPath。你检查过那些表达式是否选择了正确的元素?我不知道Selenium是否适用于源文档或构建的DOM ...(在表单和表格中,浏览器可能会添加一些匿名元素) – 2010-11-25 16:04:38

回答

0

为了记录,我能够通过使用DOM定位器来解决问题。不幸的是,它看起来丑如:

dom=function getLinkNextToDisabled() 
{ 
    var addressesTable = document.getElementsByName('AddressList')[0].getElementsByTagName('table')[0].getElementsByTagName('table')[0]; 
    var inputs = addressesTable.getElementsByTagName('input'); 
    for (i = 0; i < inputs.length; i++) 
    { 
     if (inputs[i].disabled) 
     { 
      return inputs[i].parentNode.parentNode.getElementsByTagName('a')[0]; 
     } 
    } 
}; 
getLinkNextToDisabled(); 

遗憾的是这样的代码让我伤心,所以我仍然开放给任何XPath解决方案,将在IE7中工作。

问候!

1

你已经在FireFox中显示了HTML,但是你没有在IE中显示HTML,它是一样的吗?

基于在此提供我会使用此定位器的信息:

//tr[td/input[@disabled='disabled']]/td/a 

此认为,具有包含禁用输入元件的单元格,然后行定位,其具有亚割和精确定位的锚小区。

不过,我不能在IE中看到HTML标记,我不知道这是否是有效还是无效