制作硒无需等待元素

本文关键字:等待 元素 | 更新日期: 2023-09-27 18:27:02

我使用硒有一段时间了,对IWebElement Wait过程有一些疑问。

我们有显式等待和隐式等待。我使用它们并理解其含义,但。。

我怎样才能让硒等元素?

我试着不使用等待函数,但当我调用FindElementGoToUrl时,它并不总是立即返回,有时仍然等待0到60秒的

我注意到,在大多数时间里,FindElement中的等待没有返回元素,而且等待是没有原因的。

例如:调用元素id可能需要3秒,而不是立即调用(大量关闭调用大量时间…)也许我做错了什么。

主要目的是完全控制程序并自己处理等待时间(以提高效率)

也许有更好的文章来理解硒寻找元素的结构?(不是硒API)

(我使用的是硒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(); // *
  • At Last在大约3~5秒后调用它的throw异常,而不是立即调用(当我将Implicit设置为60秒时,它会找到元素!)

制作硒无需等待元素

我不知道你所说的"我如何才能让硒完全不等待元素?"

如果你的意思是你根本不想要硒,那就等一种元素。我认为这可能有效-

driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS); 
WebElement textbox = driver.findElement(By.id("textbox"));

使用此方法并编写您自己的方法,该方法需要一个定位器,无需等待秒,然后根据传递给方法的内容在方法内部设置隐式等待。

public WebElement locateElementById(int timeInSec, String id){
    driver.manage().timeouts().implicitlyWait(timeInSec, TimeUnit.SECONDS); 
    WebElement element = driver.findElement(By.id(id));
    return Element
}

像这样的东西。然后你可以用你想要的秒数呼叫它。

当你想要0秒时通过0当你想要10秒时通过10。