制作硒无需等待元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了制作硒无需等待元素相关的知识,希望对你有一定的参考价值。

我正在使用硒一段时间,并对IWebElement Wait程序有一些疑问。

我们有明确的等待和隐含我使用它们并理解其含义但是......

我怎么能让硒不等元素呢?

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

我注意到在大多数情况下,FindElement的等待没有返回元素并且没有理由等待。

例如:对元素id的调用可能需要3秒而不是立即(批量调用很多时间...)也许我做错了什么。

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

也许有更好的文章来了解寻找元素的硒结构? (不是硒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秒之后调用它的抛出异常而不是立即(当我将Implicit设置为60秒时它会找到元素!)
答案

我不确定你的意思是“我怎么能让硒不等元素?”

如果你的意思是你不想让selenium完全等待一个元素。我认为这可能有效 -

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。

以上是关于制作硒无需等待元素的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用硒中的字符串中的数据来查找元素[重复]

一些类似的硒等待有啥区别?

抓取动态数据硒 - 无法定位元素

找不到硒元素下拉菜单python

如何单击硒悬停后可见的元素?

如何等到硒python中的元素可用