Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.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# OpenQA.Selenium.NoSuchElementException:使用Selenium和C在页面上查找元素时,无法找到元素错误#_C#_Selenium_Xpath_Css Selectors_Webdriverwait - Fatal编程技术网

C# OpenQA.Selenium.NoSuchElementException:使用Selenium和C在页面上查找元素时,无法找到元素错误#

C# OpenQA.Selenium.NoSuchElementException:使用Selenium和C在页面上查找元素时,无法找到元素错误#,c#,selenium,xpath,css-selectors,webdriverwait,C#,Selenium,Xpath,Css Selectors,Webdriverwait,我正在努力把这篇文章删去睡觉在页面中编辑出站点 它具有css选择器: #autocplt_wrap > ul:nth-child(1) > li:nth-child(1) > span:nth-child(1) > a:nth-child(1) 和x路径: /html/body/div[2]/div[1]/div[3]/div[2]/div[1]/div/div[1]/div[2]/div/div/ul[1]/li/span/a[1] 我的代码是: IWebDrive

我正在努力把这篇文章删去
睡觉在页面中
编辑出站点

它具有css选择器:

#autocplt_wrap > ul:nth-child(1) > li:nth-child(1) > span:nth-child(1) > a:nth-child(1)
和x路径:

/html/body/div[2]/div[1]/div[3]/div[2]/div[1]/div/div[1]/div[2]/div/div/ul[1]/li/span/a[1]
我的代码是:

IWebDriver driver = new FirefoxDriver();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
//load webdriver
driver.Manage();
driver.Navigate().GoToUrl("https://dict.naver.com/linedict/zhendict/#/cnen/home");
driver.FindElement(By.ClassName("ac_input")).SendKeys("睡觉" + Keys.Enter);
driver.FindElement(By.CssSelector("#autocplt_wrap > ul:nth-child(1) > li:nth-child(1) > span:nth-child(1) > a:nth-child(1)"));
无论我尝试什么,我总是会得到错误:

Unhandled exception. OpenQA.Selenium.NoSuchElementException: Unable to locate element: #autocplt_wrap > ul:nth-child(1) > 
li:nth-child(1) > span:nth-child(1) > a:nth-child(1)
   at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(String mechanism, String value)
   at OpenQA.Selenium.By.<>c__DisplayClass29_0.<CssSelector>b__0(ISearchContext context)
   at OpenQA.Selenium.By.FindElement(ISearchContext context)
   at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(By by)
未处理的异常。OpenQA.Selenium.NoSuchElementException:无法定位元素:#autocplt_wrap>ul:n子元素(1)>
li:n个孩子(1)>span:n个孩子(1)>a:n个孩子(1)
在OpenQA.Selenium.Remote.RemoteWebDriver.UnpackantRownerError(响应错误响应)中
在OpenQA.Selenium.Remote.RemoteWebDriver.Execute(stringdrivercommandtoexecute,Dictionary`2参数)
在OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(字符串机制,字符串值)
在OpenQA.Selenium.By.c__显示类29_0.b_0(ISearchContext)
在OpenQA.Selenium.By.FindElement(ISearchContext)上
位于OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(By)

所需元素是动态元素,以便提取文本睡觉您必须为所需的
元素isvisible()
诱导WebDriverWait,并且您可以使用以下任一选项:

  • css选择器

    Console.WriteLine(new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementIsVisible(By.CssSelector("a.srchword[data-entryid]"))).GetAttribute("innerHTML"));
    
    Console.WriteLine(new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.CssSelector("a.srchword[data-entryid]"))).GetAttribute("innerHTML"));
    
  • XPath

    Console.WriteLine(new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementIsVisible(By.XPath("//a[@class='srchword' and @data-entryid]"))).GetAttribute("innerHTML"));
    
    Console.WriteLine(new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath("//a[@class='srchword' and @data-entryid]"))).GetAttribute("innerHTML"));
    

使用
DotNetSeleniumExtras.WaitHelpers
nuget
  • css选择器

    Console.WriteLine(new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementIsVisible(By.CssSelector("a.srchword[data-entryid]"))).GetAttribute("innerHTML"));
    
    Console.WriteLine(new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.CssSelector("a.srchword[data-entryid]"))).GetAttribute("innerHTML"));
    
  • XPath

    Console.WriteLine(new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementIsVisible(By.XPath("//a[@class='srchword' and @data-entryid]"))).GetAttribute("innerHTML"));
    
    Console.WriteLine(new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath("//a[@class='srchword' and @data-entryid]"))).GetAttribute("innerHTML"));
    
您可以在中找到相关的讨论


参考文献 您可以在以下内容中找到关于NoTouchElementException的一些相关讨论:


嘿,非常感谢。这就成功了。。。只有一个例外<代码>预期条件
现在已折旧。您需要编写自己的函数,或者使用nugetooh安装
DotNetSeleniumExtras.WaitHelpers
,但忘了提到您需要完成整个名称空间的工作
SeleniumExtras.WaitHelpers.ExpectedConditions
以防有人在future@sourlemonaid使用
DotNetSeleniumExtras.WaitHelpers
@sourlemonaid更新了答案,如果为了未来读者的利益,这个/任何答案对您有帮助。