2015-07-12 107 views
1

HTML頁面包含用戶詳細信息表。
我需要刪除用戶。
我可以通過用戶名來選擇行中的第一個元素。
我需要選擇該行上的「刪除」按鈕來刪除該用戶。
HTML結構爲:WebDriver Selenium:需要在表格中選擇元素後

<table id="tblUsersGrid" cellpadding="2"> 
<thead> 
<tbody> 
<tr class="aboutMeRow" data-parentid="223"> 
<tr> 
<tr> 
... 
<tr> 
    <td class="cell cell_278 cell_NameCell">xoxo</td> 
    <td class="optionIcon overrideFloat orgIcon cell cell_278 gridCell"></td> 
    <td class="cell cell_278 gridCell">Custom</td> 
    <td class="cell cell_278 gridCell">qaadmin</td> 
    <td class="cell cell_278 gridCell">0</td> 
    <td class="cell gridCell"> 
     <div class="removeAccountIcon"></div> 
    <td class="cell gridCell"> 
     <div class="editAccountIcon"></div> 
    </td> 
    <td></td> 
</tr> 

所以我可以很容易地通過

driver.findElement(By.xpath("//td[@class='cell_NameCell'][contains(text(),'xoxo')]")) 

選擇所需的行,但我怎麼能達到該行的removeAccountIcon元素?
我看到很多問題處理選擇表內的元素,但沒有找到解決這個問題。
有沒有辦法通過CSS選擇器來做到這一點,而不僅僅是通過Xpath? (我確信有這個Xpath解決方案)。

+0

我知道這不是你真正想要的,但你可以找到表,然後迭代每行並使用findElements獲取列(td)列表。在列表中,您可以通過索引獲取元素以檢查用戶並獲取按鈕(這裏是一個類似的代碼,可以執行此操作http://stackoverflow.com/a/14192252) – Guillermo

+0

嗯,這是一個解決方案。你是對的。但我想有一個表達式(Xpath)來完成這項工作。 – Eliyahu

+0

是的,我想也是...類似這樣的東西:// td [contains(text(),'xoxo')/ following-sibling :: td // div [@ class ='removeAccountIcon'] – Guillermo

回答

1

Xpath軸preceding-sibling可以幫助您解決問題。你可以試試下面的XPath:

//td[preceding-sibling::td[contains(text(),'xoxo')]][5]/div[@class='removeAccountIcon']

讓我知道它是否適合你。

+0

是的,這絕對奏效!謝謝! – Eliyahu

1

如果您可以選擇正確的行,您可以通過在該行上調用findElement而不是原始驅動程序來在該行內選擇所需的元素。但是,您建議用於查找正確行的代碼似乎不起作用。 (它選擇一個TD代替TR。)

我建議如下:

WebElement userDataInRow = driver.findElement(By.xpath(//td[contains(text(),'xoxo')])) 
WebElement row = userDataInRow.findElement(By.xpath("..")) 
row.findElement(By.xpath("//div[@class='removeAccountIcon']")) 

第二行轉移到所選擇的TD元素的父元素。

+0

我有一張桌子。每行包含'class =「removeAccountIcon」'元素。我需要在所需的行上選擇這個元素,包含我想要刪除的用戶,而不是表中的第一個用戶。 – Eliyahu

+0

這不是我要求的方式,但謝謝。這也是一個有趣的方法。 – Eliyahu

1

我不認爲有一個選項可以通過使用css選擇器找到父項。 This文章給出了找到相同的其他備選項。

要使用xpath捕獲「刪除」按鈕,我們只需要遍歷表格的「名稱」單元格的父級,然後獲取「刪除鏈接/按鈕」的「div」。

那麼你的XPath //td[@class='cell'][contains(text(),'xoxo')]應更新如下:

//td[contains(text(),'xoxo')]/../td/div[@class='removeAccountIcon']

這將捕獲「刪除帳戶圖標」根據給定的名稱。

//tr[td[contains(@class, 'cell_NameCell')] = 'xoxo']//div[@class='removeAccountIcon'] 

在這裏,我們通過檢查包含cell_NameCelltd元素的文本定位適當tr行(這是你的用戶名小區):

+0

明天我會檢查這個。謝謝! – Eliyahu

+0

對不起,但這並不適用於我 – Eliyahu

+0

請您複查一下您寫的表達方式,以便它能正常工作嗎?我已經有@Abhishek提供的工作解決方案,但是有多種方法可以做到這一點,這將是非常好的。 – Eliyahu

2

您可以使用以下XPath表達使其一氣呵成。然後,我們找到該行內的「刪除賬戶圖標」。

+0

我也會檢查這一點。謝謝! – Eliyahu

+0

我理解你的邏輯,但你提供的Xpath表達式對我來說不起作用。我試圖編輯它,但仍然無法成功使其工作。 – Eliyahu

+0

你能否請複習一下你寫的表達式,以便它能起作用?我已經有@Abhishek提供的工作解決方案,但是有多種方法可以做到這一點,這將是非常好的。 – Eliyahu

相關問題