【问题标题】:Selenium WebDriver: cannot find element with nameSelenium WebDriver:找不到具有名称的元素
【发布时间】:2011-11-11 16:27:38
【问题描述】:

我已经像在文档中那样编写了示例:

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,加载 google 页面,我可以阅读 driver.Title,但无法通过名称、选择器或 id 找到任何元素。

有什么想法吗?

UPD

可怕的是,这段代码在我的桌面(Windows 7、VS 2010 Express)上运行,在虚拟机中不起作用(VmWare 播放器、Windows 2008 R2 SP 1 试用版、VS 2010 Ultimate 试用版):-( p>

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

UPD 2

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

解决方案

对于 Windows 服务器安装,该站点似乎应该处于“受信任”状态。我不知道为什么,但是将 google.com 添加到受信任的解决了一个问题

【问题讨论】:

    标签: .net .net-4.0 selenium


    【解决方案1】:

    对于 Windows 服务器安装,该站点应处于“受信任”状态。我不知道为什么,但将 google.com 添加到受信任解决了一个问题

    【讨论】:

      【解决方案2】:

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

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

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

      希望这会有所帮助。

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

      【讨论】:

      • 我也更新了我的答案.. 你不需要把它设置为受信任
      【解决方案3】:

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

      【讨论】:

      • 是的,我试着把 5000 毫秒。 XPath 不是解决方案,我想使用名称或 id 查找元素。
      • 你本来可以直接发表评论的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 2022-10-14
      • 2016-09-07
      • 2017-10-24
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      相关资源
      最近更新 更多