至少等待5分钟,元素才会出现

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

我在互联网上尝试了很多解决方案,但每个解决方案都不适用于所有情况,我只想等到元素出现在网页上,我用硒来代替#我尝试过的两件事,其中两件偶尔会抛出异常,我只是不想得到异常,我希望我的自动化至少等待5分钟才能加载网页。

public class WaitForElement
    {
        public void WaitFE(string Xpath,IWebDriver webDriver)
        {
            WebDriverWait wait = new WebDriverWait(webDriver,    TimeSpan.FromMinutes(120));
            wait.Until(d => d.FindElement(By.XPath(Xpath)).Displayed);
            //IWebElement category = wait.Until<IWebElement>((d) =>
            //{
            //    return d.FindElement(By.XPath(Xpath));
            //});
        }
    }

至少等待5分钟,元素才会出现

最好的方法是使用显式等待,直到您找到的元素满足您想要的条件:

-等待元素存在:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromMinutes(5));
            wait.Until(ExpectedConditions.ElementExists(By.XPath("")));

-等待元素可见:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromMinutes(5));
            wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("")));

-等待元素可点击

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromMinutes(5));
            wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("")));

或者任何你需要的东西。通过在此处设置TimeSpan WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromMinutes(5));,它将默认等待5分钟(预期条件为true的最长时间)。

您可以做的另一件事是使用隐式等待作为所有页面的默认最大加载时间:

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromMinutes(5));

我想我已经解决了我的问题,这个等待函数等待元素出现大约2分钟,有人能告诉我我做的是否好吗

public class WaitForElement
    {
        public int count = 0;
        public void WaitFE(string Xpath,IWebDriver webDriver)
        {
            try
            {
                while (!(count < 10 && (webDriver.FindElement(By.XPath(Xpath)).Displayed)))
                {
                    count = 0;
                    return;
                }
            }
            catch
            {
                count++;
                WaitFE(Xpath, webDriver);
            }
        }