我正在使用Selenium Webdriver为asp.net mvc网站编写集成测试。我正在使用C#,但在C#或Java中的答案将不胜感激。 我附上了html表和生成的html代码。
我想使用webdriver 点击组名“ bcde ”的修改链接。要点击该链接,我需要ID(2138)&不是组名(bcde)。 我试过了
driver.FindElements(By.XPath("//tr[contains(td[2], 'bcde')]/td[1]").ToList()[0])
但是它给出了2137,abcde的id(按字母顺序排列第一组包含查找字符串“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>
答案 0 :(得分:1)
试试这个。
//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']
答案 1 :(得分:1)
下面为我修好了。
driver.FindElement(By.CssSelector("a[href=\"/Group/Edit/" + driver.FindElements(By.XPath("//tr[contains(td[2], 'bcde')]/td[2]")).Where(t => t.Text.Equals(groupName)).ToList()[0].FindElement(By.XPath("..")).FindElement(By.XPath(".//td[1]")).Text + "\"]")).Click();
.FindElement(By.XPath(".."))
找到父元素。
**.//**
搜索所有子元素。
因此,FindElement(By.XPath(".//td[1]"))
为第一个类型为 td 的孩子提供。
答案 2 :(得分:0)
这answer给了我们一些帮助。
由于我们看到文本周围的空白,找到确切的文本匹配有点繁琐。 XPath函数normalize-space()
清除元素文本中的空格。
要找到包含&#34; bcde&#34; 的组名表格单元格,请使用xPath字符串
//td[normalize-space() = 'bcde']
对于与该组名称相关联的单元格中的Group Id,请使用XPath字符串查看前一个单元格
//td[normalize-space() = 'bcde']/preceding-sibling::td
对于编辑链接,我们可以使用此XPath字符串
在以下单元格中找到它//td[normalize-space() = 'bcde']/following-sibling::td//a[contains(.,'Edit')]