Selenium - C# - Webdriver - 无法找到元素

时间:2014-04-15 12:42:06

标签: c# selenium selenium-webdriver webdriver

在C#中使用selenium我正在尝试打开浏览器,导航到Google并找到文本搜索字段。

我尝试以下

IWebDriver driver = new InternetExplorerDriver(@"C:\");

driver.Navigate().GoToUrl("www.google.com");

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));

IWebElement password = driver.FindElement(By.Id("gbqfq"));

但是会收到以下错误 -

无法找到id == gbqfq

的元素

2 个答案:

答案 0 :(得分:2)

这看起来像this question的副本已经得到了解答。

我可以告诉你我做了什么,这似乎对我有用:

public static IWebElement WaitForElementToAppear(IWebDriver driver, int waitTime, By waitingElement)
{
        IWebElement wait = new WebDriverWait(driver, TimeSpan.FromSeconds(waitTime)).Until(ExpectedConditions.ElementExists(waitingElement));
        return wait;
}

这应该等待waitTime时间,直到找到元素为止。我遇到了很多问题,动态页面没有立即加载我需要的元素,WebDriver试图找到比页面加载它们更快的元素,这是我的解决方案。希望它有所帮助!

答案 1 :(得分:0)

您可以尝试使用旋转等待

int timeout =0;
while (driver.FindElements(By.id("gbqfq")).Count == 0 && timeout <500){
  Thread.sleep(1);
  timeout++;

 }
 IWebElement password = driver.FindElement(By.Id("gbqfq"));

这应该有助于确保元素实际上有时间出现。

另请注意,“gbqfq”id有点气味。我可能会尝试一些比那个更有意义的匹配。