我的html代码如下所示:
<div id="food-search-all" class="fd_food_search_all fd_loading" style="display: block;">
<ul class="fd-breadcrumbs" >
<li>
<a href="Javascript://" class="breadcrumb">Baked beans</a>
</li>
</ul>
<div class="fd-search-results"><table class="results ib-list" cellpadding="0" cellspacing="0" border="0">
<tbody>
<tr class="foods foods_s-fndds244535">
<td class="name">
<a href="Javascript://">Baked beans</a>
</td>
<td class="default-amount"> </td>
</tr>
<tr class="foods foods_s-fndds244535">
<td class="name">
<a href="Javascript://">Chickens</a>
</td>
<td class="default-amount"> </td>
</tr>
<tr class="foods foods_s-fndds244535">
<td class="name">
<a href="Javascript://">Cow milk</a>
</td>
<td class="default-amount"> </td>
</tr>
</tbody>
</table></div>
</div>
如何点击驻留在table / tr / td / a中的文本Baked beans
我试过以下代码,
driver.findElement(By.xpath("/table[contains(@class,'results ib-list')]/tbody/tr/td[@class = 'name']/a[contains(text(),"+linktext+")]")).click();
但显示异常:
org.openqa.selenium.InvalidSelectorException: The given selector
答案 0 :(得分:0)
您的代码中出现小错误,您在文本"+linktext+"
周围错过了“
driver.findElement(By.xpath("/table[contains(@class,'results ib-list')]/tbody/tr/td[@class = 'name']/a[contains(text(),'"+linktext+"')]")).click();
NoSuchElementException
通常表示该元素位于frame
中,或者加载速度较慢。 Selenium仅与当前帧中的元素交互。在您切换到frame
之前,无法与子frame
内的任何元素进行互动。您可以使用switchTo().frame()
:
driver.switchTo().frame(ARG);
frame()
的论据是
frame
webelement
frame
重新引用
在iframe
完成后,使用以下内容退回到文档顶部:
driver.switchTo().defaultContent();
答案 1 :(得分:0)
由于您在标记下有链接,因此selenium必须使用以下代码。
你的xpath将是.//*[@id='food-search-all']/ul/li
(假设div id是唯一的。你可以使用firebug帮助生成xpath)
IWebElement TargetElement = driver.FindElement(By.XPath(xPathVal));
string CellVal = TargetElement.Text.ToString();
TargetElement = driver.FindElement(By.LinkText(CellVal));
TargetElement.Click();
有时sigle使用.Click()不起作用我会建议再添加一个TargetElement.Click();如果你的第一次尝试不起作用。