-2

假设我们有一张人桌。每一行都有一张图片、一个名字、一个城市和一些社交按钮,比如 PM、加为好友、关注。

如何“加为好友”某个人?有 10 个人,有 10 个“添加为朋友”按钮,我有一个名字 - 比如说 George Busch。

我不知道他的个人资料将从这 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

这些是用户的可点击名称 xpath:

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
4

3 回答 3

2

好吧,这是使用网格时非常常见的情况。最好的方法是使用 xpath。诀窍是获取包含名称 George Busch 的行,无论该行在网格中的哪个位置。在行中单击按钮。将在以下网站中使用网格给出一个简单的示例。 http: //demos.kendoui.c​​om/web/grid/index.html .grid 客户数据库有很多用户。我将展示 xpath,它将获取名字为 Margaret 的人的年龄。如果您显示 html,则可能会给出与此类似的内容。xpath如下。

//tr[td[text() = 'Margaret']]/descendant::td[text()= '55']
于 2013-08-08T02:27:33.413 回答
2

您可以创建一个 xpath 来标识包含文本“George Busch”的表格单元格,然后跟踪到包含按钮的单元格。这是简洁有效的。

xpath 的具体构建方式取决于您的整体 html 结构,但我将向您展示一个简单的工作示例。

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

tdxpath 的第一部分是用您的文本唯一地标识单元格。现在,我假设您确定该人的姓名不会出现在屏幕的 html 中的其他任何地方:

//td[text()='George Busch']

xpath 的下一部分使用双点..表示法来表示父级,因为我们想将层次结构向上返回到tr表行:

//td[text()='George Busch']/..

xpath 的下一部分沿着层次结构向下一层找到按钮;现在,我假设表格的每一行只有一个按钮:

//td[text()='George Busch']/../td/button

所以整体模式集中在两个元素,人名和按钮;xpath首先找到人名,然后追溯层次结构直到公共父级,然后返回到按钮。

调整 xpath

根据您的整体 html 结构,我的示例 xpath 可能需要更改。例如,也许屏幕上有许多不同的表格,其中可能出现文本“ George Busch ”?在这种情况下,您需要唯一标识该表,例如使用这样的 id:

//table[@id='addfriendstable']//td[text()='George Busch']/../td/button

或者表格的每一行都有几个按钮?如果是这样,我们需要唯一标识我们想要的按钮,例如通过使用类:

//td[text()='George Busch']/../td/button[@class='befriend']

火路

我真的推荐使用Firepath for firefox——它是检查 xpath 是否正常工作的好工具。我用它来验证这个答案中的示例 xpaths。

于 2013-08-08T08:20:54.243 回答
1

编写一个选择器,以便 afindElements()返回 10 个元素(每个人一个)

在每个元素上,执行element.getText(), 并测试它是否包含 George Busch。

如果是这样,那么在下一个元素上,执行一个element.findElement("")将返回链接的选择器,然后单击它。

于 2013-08-07T21:07:15.077 回答