让我们说我们有一张人的表。在每一行中都有一张图片,一个名字,一个城市和一些社交按钮,如PM,添加为朋友,关注。
我如何“加为好友”某个人? 有10个人,有10个“添加为朋友”按钮,我有一个名字 - 让我们说乔治布施。
我不知道他的个人资料将从哪个地方取出10个页面,当页面生成时,我只想点击“添加为朋友”链接,该链接最接近George Busch。
编辑:我将使用接受答案中提供的示例代码来演示我的案例:
<table id="addfriendstable" class="colouredgrid">
<tr id="person65894" class="resultsrow odd">
<td>George Busch</td>
<td><button class="befriend">Add as friend</button></td>
</tr>
<tr id="person3244" class="resultsrow even">
<td>Jimmy Corker</td>
<td><button class="befriend">Add as friend</button></td>
</tr>
<tr id="person91236" class="resultsrow odd">
<td>Abraham Linton</td>
<td><button class="befriend">Add as friend</button></td>
</tr>
</table>
编辑:这是我现实生活中的榜样。我无法正确连接xpath
这些是用户的可点击名称xpaths:
xpath=(//a[contains(text(),'Justin Timberlake')])[2]
//div[@id='main']/div/section/section/ul/li[2]/article/section/section/a
xpath=(//a[contains(@href, '/users/justin-timberlake')])[4]
//li[2]/article/section/section/a
这些是“添加为朋友”按钮的不同变体:
xpath=(//a[contains(text(),'Add as Friend')])[2]
//div[@id='main']/div/section/section/ul/li[2]/article/section/section/div/a
//a[contains(@href, '/users/1/friendships?friend_id=51c027d7f325db7ee7000032&origin=search')]
//li[2]/article/section/section/div/a
答案 0 :(得分:2)
这对于使用网格来说是一种非常常见的情况。最好的方法是使用xpath。诀窍是获取包含名称George Busch的行,无论行在网格中的哪个位置。在行中单击按钮。将在以下网站中使用网格给出一个简单的示例。 http://demos.kendoui.com/web/grid/index.html 。网格客户数据库有很多用户。我将展示xpath,它将获得名为Margaret的人的年龄。如果你显示html可能会给出类似的东西。 xpath如下。
//tr[td[text() = 'Margaret']]/descendant::td[text()= '55']
答案 1 :(得分:2)
您可以创建一个xpath来标识包含文本'George Busch'的表格单元格,然后跟踪到包含该按钮的单元格。这简洁而有效。
究竟如何构造xpath取决于你的整体html结构,但我会向你展示一个简单的工作示例。
<table id="addfriendstable" class="colouredgrid">
<tr id="person65894" class="resultsrow odd">
<td>George Busch</td>
<td><button class="befriend">Add as friend</button></td>
</tr>
<tr id="person3244" class="resultsrow even">
<td>Jimmy Corker</td>
<td><button class="befriend">Add as friend</button></td>
</tr>
<tr id="person91236" class="resultsrow odd">
<td>Abraham Linton</td>
<td><button class="befriend">Add as friend</button></td>
</tr>
</table>
xpath的第一部分是唯一标识包含文本的td
单元格。现在,我假设您确定该人的姓名不会出现在屏幕的其他任何地方:
//td[text()='George Busch']
xpath的下一部分使用双点..
表示法来表示父级,因为我们希望将层次结构返回到tr
表行的一级:
//td[text()='George Busch']/..
xpath的下一部分沿着层次结构向下找到按钮;现在,我假设表格的每一行只有一个按钮:
//td[text()='George Busch']/../td/button
所以整体模式集中在两个元素,人名和按钮; xpath首先找到人名,然后跟踪层次结构到公共父级,然后返回到按钮。
根据您的整体html结构,我的示例xpath可能需要更改。例如,屏幕可能有许多不同的表格,其中可能出现“ George Busch ”文本?在这种情况下,您需要唯一地标识表,例如使用如下的id:
//table[@id='addfriendstable']//td[text()='George Busch']/../td/button
或者表格中每行有几个按钮?如果是这样,我们需要唯一地标识我们想要的按钮,例如使用类:
//td[text()='George Busch']/../td/button[@class='befriend']
我真的建议将Firepath用于firefox - 它是检查xpath是否正常工作的绝佳工具。我已经用它来验证这个答案中的示例xpath。
答案 2 :(得分:1)
编写一个选择器,以便findElements()
将返回10个元素(每个人一个)
在每个元素上,执行element.getText()
,然后测试它是否包含George Busch。
如果是,则在下一个元素上,执行将返回链接的element.findElement("")
选择器,然后单击它。