OpenQA.Selenium.NoSuchElementException:使用Selenium和C#在页面上定位元素时无法定位元素错误 [英] OpenQA.Selenium.NoSuchElementException: Unable to locate element error while locating an element on a page using Selenium and C#
本文介绍了OpenQA.Selenium.NoSuchElementException:使用Selenium和C#在页面上定位元素时无法定位元素错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试在编辑了站点
它具有css选择器:
#autocplt_wrap > ul:nth-child(1) > li:nth-child(1) > span:nth-child(1) > a:nth-child(1)
和x-Path:
/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)"));
无论我尝试什么,我总是会收到错误消息:
No matter what I try I always get the error:
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)
推荐答案
所需元素是动态元素,因此要提取文本睡觉,您必须诱导 WebDriverWait 所需的 ElementIsVisible()
,您可以使用以下任一
The desired element is a dynamic element so to extract the text 睡觉 you have to induce WebDriverWait for the desired ElementIsVisible()
and you can use either of the following Locator Strategies:
-
CssSelector
:
Console.WriteLine(new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(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"));
-
CssSelector
:
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(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath("//a[@class='srchword' and @data-entryid]"))).GetAttribute("innerHTML"));
参考
您可以在以下位置找到有关 NoSuchElementException 的一些相关讨论:
- NoSuchElementException,Selenium无法找到元素
- Selenium"selenium.common.exceptions.NoSuchElementException"(使用Chrome浏览器时
这篇关于OpenQA.Selenium.NoSuchElementException:使用Selenium和C#在页面上定位元素时无法定位元素错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文