Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用XPATH或CSS选择器在Selenium中查找元素_C#_Css_Xpath_Selenium Webdriver - Fatal编程技术网

C# 使用XPATH或CSS选择器在Selenium中查找元素

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

我试图在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();
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()