【问题标题】:How to use xpath to select a value in a drop down list located in a particular row?如何使用 xpath 在位于特定行的下拉列表中选择一个值?
【发布时间】:2014-05-26 15:55:23
【问题描述】:

我正在使用 selenium 网络驱动程序测试页面。我有代表“请求”的数据行,并且在每一行的最后一列中,用户可以单击允许他们“批准”或“拒绝”的下拉列表(可以选择批准或拒绝)元素'请求。

我需要能够在“名称”列等于变量的行的下拉列表中选择批准选项(在这种情况下,假设变量是“约翰”)。

在此测试中,用户将通过选择批准来批准“约翰的”请求。如何使用 xpath 确保为正确的人(右行)选择正确的下拉元素?我是否需要以某种方式在 xpath 中包含选择元素?

选择下拉元素的select元素方法示例:

new SelectElement(this.Driver.FindElement(By.Name("orm")).FindElement(By.Name("Tutors"))).SelectByText(tutorName);

<form name="RequestsForm" action="SubmitRequest.aspx" method="POST">
<h2 class="blacktext" align="center">Course approvals</h2>
<table class="cooltable" width="90%" border="0" cellspacing="1" cellpadding="1">
<tbody>
<tr>
<td class="heading">
<b>Name</b>
</td>
<td class="heading">
<b>Request Date</b>
</td>
<td class="heading">
<b>Approved</b>
</td>
</tr>
<tr>
<td>
John
<input id="T1" type="text" value="888" name="T1">
</td>
<td>1/3/2015</td>
<td>
<select id="D1" class="selecttext" size="1" name="D1">
<option>?</option>
<option value="Approved">Approved</option>
<option>Rejected</option>
</select>
</td>
</tr>
</tbody>
</table>

【问题讨论】:

    标签: html xpath selenium-webdriver html-table row


    【解决方案1】:

    使用 XPath,这将获得 Name 列在您的表中的 位置

    count(//table[@class='cooltable']/tbody/tr[1]/td[b = 'Name']/preceding-sibling::td)+1
    

    您可以使用该位置在其他列中获取相应的表格单元格。这会选择第二行中对应的td(其中...代表上面的表达式):

    //table[@class='cooltable']/tbody/tr[2]/td[count( ... )+1]
    

    附加/text() 将提取文本(带空格)。使用 normalize-space() 将修剪文本,以便您可以将其与 John 进行比较:

    normalize-space(//table[@class='cooltable']/tbody/tr[2]/td[count( ... )+1]/text()) = 'John'
    

    要在Name 列中仅选择包含Johntr,您只需在谓词中保留td。现在它返回一个包含所有与谓词 text = John 匹配的 tr 的节点集:

    //table[@class='cooltable']/tbody/tr[normalize-space(td[count( ... )+1]/text()) = 'John']
    

    最后,如果您将//select/option[@value='Approved'] 附加到该表达式,您将在该tr 的上下文中选择具有Approved 属性的选项。这是完整的 XPath 表达式:

    //table[@class='cooltable']/tbody/tr[normalize-space(td[count(//table[@class='cooltable']/tbody/tr[1]/td[b = 'Name']/preceding-sibling::td)+1]/text()) = 'John']//select/option[@value='Approved']
    

    【讨论】:

      猜你喜欢
      • 2019-01-21
      • 2016-09-20
      • 1970-01-01
      • 2014-10-03
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      • 2016-12-21
      • 2015-10-05
      相关资源
      最近更新 更多