使用selenium webdriver的google搜索框的c#中的NoSuchElementException

时间:2015-09-26 12:50:32

标签: c# selenium selenium-webdriver

我尝试使用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),则会收到相同的错误消息。但这似乎只是使用谷歌搜索页面出错。

1 个答案:

答案 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")));