【问题标题】:Make selenium No wait for element制作硒不等待元素
【发布时间】:2015-12-16 06:51:19
【问题描述】:

我使用 selenium 有一段时间了,对 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 秒时,它会找到元素!)

【问题讨论】:

    标签: c# .net selenium selenium-webdriver webdriver


    【解决方案1】:

    我不确定您所说的“我怎样才能让硒完全不等待元素?”

    如果你的意思是你根本不希望 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。

    【讨论】:

    • 我用过:driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(0));
    • 嗯,我认为它应该可以工作。请再试一次,如果它没有发布您的代码。
    • 我试过了,但是当我调用 driver.FindElement(By.PartialLinkText("enter")).Click();该函数等待几秒钟并抛出我想要的异常,它将立即抛出异常,而不是等待 5 秒钟。没有元素抛出异常,让我处理它。
    • 发布您的相关代码。如果没有设置超时,它根本不应该等待。默认值为 0。
    • driver.FindElement(By.PartialLinkText("someText")).Click();这一行试图找到一个带有一些文本的元素,所以我相信这可能需要一些处理和搜索时间,因为这是一种非常低效的查找元素的方法。你能不能用像ID这样更明确的定位器试试看需要多少时间。
    猜你喜欢
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 2015-06-13
    • 1970-01-01
    相关资源
    最近更新 更多