2015-07-12 115 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

相关问题