gpt4 book ai didi

c# - 制作 Selenium 无需等待元素

转载 作者:行者123 更新时间:2023-11-30 15:23:35 24 4
gpt4 key购买 nike

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

我们有 Explicit Wait 和 Implicit 我使用它们并理解其含义但是..

如何让 selenium 完全不等待元素?

我试着不使用等待函数,但当我调用 FindElementGoToUrl 时,它并不总是立即返回,有时仍然等待 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(); // *
  • At Last 在大约 3 到 5 秒后调用它的抛出异常,而不是立即调用(当我将隐式设置为 60 秒时,它找到了元素!)

最佳答案

我不确定你所说的“我怎样才能让 selenium 完全不等待元素?”是什么意思

如果您的意思是您根本不想让 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 时。

关于c# - 制作 Selenium 无需等待元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34305616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com