我使用selenium有一段时间了,对于 IWebElement Wait
过程有一些疑问。
我们有显式等待和隐式等待,我使用它们并理解它们的含义,但是...
如何让selenium完全不等待元素?
我尝试不使用等待函数,但当我调用 FindElement
或者 GoToUrl
时,有时仍然不会立即返回,而是等待0到60秒。
我注意到大多数情况下,FindElement
中的等待没有返回元素,也没有任何原因需要等待。
例如:调用元素id可能需要3秒钟才能立即返回(很多次调用很多时间...),也许我做错了什么。
主要目的是完全控制程序并自己处理等待时间(以提高效率)。
也许有更好的文章来了解selenium查找元素的架构?(而不是selenium API)
(我正在使用最新版本的selenium 2.48.0)
代码示例:
driver = new FirefoxDriver();
js = driver as IJavaScriptExecutor;
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(0));
driver.Manage().Window.Maximize();
driver.Navigate().GoToUrl("someUrl");
IList<IWebElement> loginFrame = driver.FindElements(By.TagName("iframe"));
driver.SwitchTo().DefaultContent().SwitchTo().Frame(loginFrame[0]);
driver.FindElement(By.Id("userID")).SendKeys("username");
driver.FindElement(By.Id("userPassword")).SendKeys("userPassword");
driver.FindElement(By.Id("login")).Click();
driver.SwitchTo().DefaultContent();
driver.FindElement(By.XPath("//div[@class='something']/ul/li[2]/a")).Click();
driver.FindElement(By.PartialLinkText("someText")).Click(); // *
- 最后,在大约3~5秒钟之后才会抛出异常,而不是立即抛出异常(当我将隐式等待设置为60秒时,它可以找到该元素!)