我正在使用Selenium Webdriver为一个asp.net mvc网站编写集成测试。我用的是C语言,但如果你能用C语言或Java语言回答,我将不胜感激。
我已经附上了html表和生成的html代码。
我想用webdriver点击groupname“bcde”的编辑链接。要单击链接,我需要id(2138)而不是组名(bcde)。
我试过了
driver.FindElements(By.XPath("//tr[contains(td[2], 'bcde')]/td[1]").ToList()[0])
但它给出2137,id of abcde(按字母顺序第一组包含查找字符串“bcde”)。
我需要与组名“bcde”完全匹配的id 2138。
<table class="table">
<tr>
<th>
Group id
</th>
<th>
Group Name
</th>
<th>
</th>
</tr>
<tr>
<td>
2137
</td>
<td>
abcde
</td>
<td>
<span><a href="/Group/Edit/2137" id="lnkGroupEdit">Edit</a> | </span>
<span> <a href="/Instrument?groupID=2137" id="lnkGroupDelete">Delete</a> | </span>
</td>
</tr>
<tr>
<td>
2138
</td>
<td>
bcde
</td>
<td>
<span><a href="/Group/Edit/2138" id="lnkGroupEdit">Edit</a> | </span>
<span> <a href="/Delete?groupID=2138" id="lnkGroupDelete">Delete</a> | </span>
</td>
</tr>
<tr>
<td>
2139
</td>
<td>
a bcde f
</td>
<td>
<span><a href="/Group/Edit/2139" id="lnkGroupEdit">Edit</a> | </span>
<span> <a href="/Instrument?groupID=2139" id="lnkGroupDelete">Delete</a> | </span>
</td>
</tr>
</table>
最佳答案
试试这个。
//tr/td[contains(.,'2137')]/..//span/a[.='Edit']
注意
.
参见我的解释here。..
中的xpath
允许您轻松地在html
层次结构中来回移动。我使用contains
是因为td
的值有whitespaces
编辑
试试这个。好像是个等待的问题
By byXpath = By.XPath("//tr/td[contains(.,'2137')]/..//span/a[.='Edit']");
new WebDriverWait(Driver,TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementExists(byXpath)).Click();
第二次编辑
最有趣的是,您试图单击的
a
标记包含各自的id
。因此,根据我的理解,最好的解决方法是使用下面的xpath
//a[contains(@href,'2138')][.='Edit']