我尝试使用selenium webdriver自动执行简单搜索。我的代码是在IE中启动google.co.uk页面,等到搜索框出现后,找到搜索框并输入"比较市场"。但是我继续从应用程序中获取NoSuchElementException,即使我可以在页面上看到它。
我的代码:
class Program
{
static void Main(string[] args)
{
string searchEngine = "www.google.co.uk";
IWebDriver IEbrowser = new InternetExplorerDriver(@"C:\Drivers");
IEbrowser.Url = searchEngine;
WebDriverWait wait = new WebDriverWait(IEbrowser, TimeSpan.FromSeconds(25));
IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
{
return d.FindElement(By.Name("q"));
});
var searchBox = IEbrowser.FindElement(By.Id("lst-ib"));
searchBox.SendKeys("compare the market");
}
}
错误讯息:
类型&#39; OpenQA.Selenium.NoSuchElementException&#39;的例外情况发生在WebDriver.dll中但未在用户代码中处理
其他信息:无法找到名称为== q
的元素
搜索框的HTML信息:
如果我尝试使用任何其他页面元素定位器(如Id),则会收到相同的错误消息。但这似乎只是使用谷歌搜索页面出错。
答案 0 :(得分:0)
你有点过度负责这项任务。 :)下面的代码工作正常。
string searchEngine = "www.google.co.uk";
IWebDriver IEbrowser = InternetExplorerDriver(@"C:\Drivers");
IEbrowser.Navigate().GoToUrl(searchEngine);
IEbrowser.FindElement(By.Id("lst-ib")).SendKeys("compare the market");
如果您想等待元素,可以使用ExpectedConditions
更简单的方法来执行此操作。请参阅下面的示例。阅读链接的文档以查看可以使用的其他可用条件。
WebDriverWait wait = new WebDriverWait(IEbrowser, TimeSpan.FromSeconds(25));
wait.Until(ExpectedConditions.ElementExists(By.Name("q")));