Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Selenium—检查元素不存在的等待时间';存在的时间太长了_C#_Selenium_Selenium Webdriver - Fatal编程技术网

C# Selenium—检查元素不存在的等待时间';存在的时间太长了

C# Selenium—检查元素不存在的等待时间';存在的时间太长了,c#,selenium,selenium-webdriver,C#,Selenium,Selenium Webdriver,我为webdriver设置了明确的等待时间: WebDriverWait wait = new WebDriverWait(_driver, new TimeSpan(0, 0, 8)); 我遇到一种情况,加载程序元素阻塞了一个按钮,所以我等待加载程序元素消失: wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.InvisibilityOfElementLocated(By.XPath(".//*[contains(@class,

我为webdriver设置了明确的等待时间:

WebDriverWait wait = new WebDriverWait(_driver, new TimeSpan(0, 0, 8));
我遇到一种情况,加载程序元素阻塞了一个按钮,所以我等待加载程序元素消失:

wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.InvisibilityOfElementLocated(By.XPath(".//*[contains(@class, 'block-ui-wrapper')]")));
btnMenuAdministration.Click();
问题是加载程序元素只存在1或2秒,测试在单击按钮之前仍然等待整整8秒。我尝试使用“ElementToBickable”,但我得到一个例外,按钮不可点击

有什么建议吗?

公共静态void waitill(此IWebDriver驱动程序,Func条件,浮点超时=10f)
        public static void WaitUntil(this IWebDriver driver, Func<bool> Condition, float timeout = 10f)
    {

        float timer = timeout;
        while (!Condition.Invoke() && timer > 0f) {

            System.Threading.Thread.Sleep(500);
            timer -= 0.5f;

        }
        System.Threading.Thread.Sleep(500);

    }

driver.WaitUntil(() => driver.FindElements(By.XPath(".//*[contains(@class, 'block-ui-wrapper')]").Length == 0);
{ 浮动计时器=超时; 而(!Condition.Invoke()&&timer>0f){ 系统.线程.线程.睡眠(500); 定时器-=0.5f; } 系统.线程.线程.睡眠(500); } driver.waitill(()=>driver.FindElements(By.XPath(“./*[contains(@class,'block ui wrapper')])))”)。长度==0);
我有一类扩展,我在其中执行了一系列自定义的Selenium操作。我发现隐式等待给我带来的麻烦比它所值的要多。我发现显式Selenium等待可能会有点冗长,而且它并不是我框架中想要的一切,所以我做了很多扩展。下面是其中一个。注意,我使用的是FindEl因为我不希望在没有发现任何异常的情况下引发异常。这应该对您有用

注意:您需要将其放在一个静态类中才能起作用。在逻辑中像这样扩展现有类时要小心,因为当其他人试图确定方法的定义位置时,它可能会混淆其他人

这是我的完整扩展名文件,通过Github gist。我包装了几乎所有的Selenium函数。我使用了大量Javascript,因为JQuery在查找元素方面是100%可靠的,而Selenium的find函数在诸如iFrame之类的内部有一些问题。此外,JQuery在查询元素方面有一种非常健壮、超级可读的方式使用任意数量的定位器,无论它们是ID、类、文本包含、伪选择器等;都在同一个查询字符串中!(Selenium css选择器中缺少伪选择器支持可能是一个限制)这就是我使用它的原因。它比xpath可读性好得多,更易于编写,并且在正确编写时100%可靠。如果测试页面上没有JQuery,那么每次加载新页面时只需插入JQuery脚本即可

因此,我要做的是使用JQuery查找并生成一个指向我想要在页面上的确切元素的显式XPath,然后将确切的XPath传递给Selenium的“find”逻辑

这听起来像是一个问题。与其寻求帮助解决问题,不如编辑你的问题并询问实际问题。你想做什么?