.net Selenium WebDriver:找不到名为的元素

.net Selenium WebDriver:找不到名为的元素,.net,.net-4.0,selenium,.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(); 但我总是得

我在文档中编写了如下示例:

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();
但我总是得到
无法找到name==q的元素的错误

IE9被打开,google页面被加载,我可以阅读
driver.Title
,但无法通过名称、选择器或id找到任何元素

有什么想法吗

UPD

可怕的是,这段代码在我的桌面(Windows 7,VS 2010 Express)上运行,在虚拟机(VmWare player,Windows 2008 R2 SP 1试用版,VS 2010 Ultimate试用版)上不运行:-(

对于自定义虚拟对象,它不起作用
页面

UPD 2

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

解决方案


似乎该站点应该处于“受信任”状态对于Windows server安装。我不知道为什么,但将
google.com
添加到trusted解决了一个问题Zerkms,尝试在您的.navigate语句之后放置一些等待时间。如果按名称不起作用,也可以使用xpath来定位元素。

问题可能是因为google搜索框现在在页面加载后加载d因此,当selenium搜索对照品时,对照品可能不存在

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

for (var retry = 0; retry < 10; retry++)
            {
                try
                {
                    if (driver.Until(driver => driver.FindElement(searchBy).Displayed))
                        return;
                }
                catch (StaleElementReferenceException)
                {
                }
            }
for(var retry=0;retry<10;retry++)
{
尝试
{
if(driver.Until(driver=>driver.FindElement(searchBy).displated))
返回;
}
捕获(StaleElementReferenceException)
{
}
}
希望这有帮助

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

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

是的,我尝试放置5000ms。
XPath
不是解决方案,我想使用名称或id查找元素。您可以只添加注释。我也更新了我的答案。您不需要将其设置为trusted