2010-11-25 23 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標記,我不知道這是否是有效還是無效