Selenium WebDriver:找不到带名字的元素

时间:2011-10-09 04:50:30

标签: .net .net-4.0 selenium

我在文档中编写了样本:

var driver = new InternetExplorerDriver();

driver.Navigate().GoToUrl("http://google.com");

var query = driver.FindElement(By.Name("q"));
query.SendKeys("Cheese");

Console.WriteLine("Title is: " + driver.Title);

driver.Quit();

但我总是得到Unable to find element with name == q错误。

IE9已打开,谷歌页面已加载,我可以阅读driver.Title,但无法按名称,选择器或ID找到任何元素。

有什么想法吗?

UPD

可怕的是,此代码适用于我的桌面(Windows 7,VS 2010 Express),并且无法在虚拟机中运行(VmWare播放器,Windows 2008 R2 SP 1试用版,VS 2010 Ultimate试用版): - (

它不适用于自定义虚拟<input name="q" />页面

UPD 2

该代码适用于Firefox驱动程序,但不适用于IE。

对于Windows服务器安装,似乎该网站应该处于“可信”状态。我不确定原因,但将google.com添加到信任解决问题

3 个答案:

答案 0 :(得分:2)

对于Windows服务器安装,该站点应处于“受信任”状态。我不确定原因,但将google.com添加到信任解决问题

答案 1 :(得分:0)

问题可能是因为谷歌搜索框现在在页面加载后加载,因此当selenium搜索它时可能会出现控件不存在的情况。

在这种情况下使用自定义搜索方法,在方法中应该有以下代码:

for (var retry = 0; retry < 10; retry++)
            {
                try
                {
                    if (driver.Until(driver => driver.FindElement(searchBy).Displayed))
                        return;
                }
                catch (StaleElementReferenceException)
                {
                }
            }

希望这有帮助。

更新: 此外,由于作者提到了IE的安全问题,我想指出,我认为你不必将它设置为信任所有你需要共享相同安全级别的站点。

答案 2 :(得分:-1)

Zerkms,尝试在.navigate语句之后放置一些等待时间也使用xpath来定位元素,如果按名称不起作用。