C# 使用XPATH或CSS选择器在Selenium中查找元素
我试图在C#中使用Selenium Webdriver查找元素“import”。已尝试以下代码,但没有找到它C# 使用XPATH或CSS选择器在Selenium中查找元素,c#,css,xpath,selenium-webdriver,C#,Css,Xpath,Selenium Webdriver,我试图在C#中使用Selenium Webdriver查找元素“import”。已尝试以下代码,但没有找到它 driver.FindElement(By.XPath("//*[@class='menu_bg']/ul/li[3]")).Click(); driver.FindElement(By.XPath("//*[@id='import']/a")).Click(); driver.FindElement(By.CssSelector("#import>a")).Click(); dr
driver.FindElement(By.XPath("//*[@class='menu_bg']/ul/li[3]")).Click();
driver.FindElement(By.XPath("//*[@id='import']/a")).Click();
driver.FindElement(By.CssSelector("#import>a")).Click();
driver.FindElement(By.XPath("//*[@class='menu_bg']/ul/li[3]/a")).Click();
driver.FindElement(By.CssSelector("ul[@class='menu_bg']>li[value='3']")).Click();
请帮帮我。设计页面如下所示:
<body>
<div class="header_bg"></div>
<div class="menu_bg">
<ul class="menu">
<li id="retrieve"></li>
<li id="scan" class="test"></li>
<li id="import">
<a target="main" href="import/import.aspx" onclick="clickme(this,'import')">Import</a>
</li>
<li id="admin"></li>
<li id="help"></li>
<li style="float: right;"></li>
</ul>
</div>
</body>
XPath索引器是基于1的,而大多数其他语言都是基于0的 这意味着您实际上针对的是2nd
li
元素,该元素没有anchor
元素
因此:
然而,这个XPath查询不是很好,而且位置太严格——因此,尽管上面这个新修复的XPath应该可以工作,但我建议您考虑其他问题。通过查看这个问题(感谢@Arran),上面的问题得到了解决。”切换到当前IFrame会指示Selenium显示对该帧的任何请求
driver.SwitchTo().Frame()
您可以通过像这样链接Selenium“FindElement”来实现这一点
driver.FindElement(按.Id(“导入”)).FindElement(按.TagName(“a”))代码>
它将为您提供ID为且标记为“a”的元素的子元素
另一种方法是将驱动程序
强制转换为IJavascriptExecutor
,并使用JQuery选择器直接在浏览器中执行javascript。我发现这对于更复杂的Selenium查找更好
((IJavascriptExecutor)Driver.ExecuteScript($)。单击();
+1,指出像这样的xpath首先应该避免。@Arran:谢谢你的建议。但我还是得到了以下错误-无法找到xpath=/*[@class='menu\bg']]/ul/li[3]/再次尝试:driver.FindElement(By.XPath(“//li[@id='import']/a”)。单击();您也可以尝试:driver.FindElement(By.id(“import”)。单击();不幸的是,您没有向我们显示页面中有任何iFrame,因此我们不可能知道这会解决问题。不过,很高兴您解决了它:)
//*[@class='menu_bg']/ul/li[3]/a
driver.SwitchTo().Frame()