Selenium C#donds'中的显式等待;不行。怎么了?

Selenium C#donds'中的显式等待;不行。怎么了?,c#,selenium,selenium-webdriver,automated-tests,selenium-chromedriver,C#,Selenium,Selenium Webdriver,Automated Tests,Selenium Chromedriver,所以我有显式等待的问题。我不想使用Thread.Sleep()。这是一个简单的测试,它打开一个页面,然后来回移动。加载此页面大约需要2-3秒,我希望以动态方式(测试)完成此操作。希望我不是太糊涂。我做了很多研究,但都不管用,也许我做错了什么。(我正在使用Resharper运行单元测试) 这里我还有一个解决方案: 我正在使用FindElement方法的扩展,所以我相信调用这个方法并自己等待是很容易的。我在解决方案中有一些解释。如果有人能给我一些帮助,我将不胜感激。(很抱歉英语不是那么完美) 这是

所以我有显式等待的问题。我不想使用Thread.Sleep()。这是一个简单的测试,它打开一个页面,然后来回移动。加载此页面大约需要2-3秒,我希望以动态方式(测试)完成此操作。希望我不是太糊涂。我做了很多研究,但都不管用,也许我做错了什么。(我正在使用Resharper运行单元测试)

这里我还有一个解决方案:

我正在使用FindElement方法的扩展,所以我相信调用这个方法并自己等待是很容易的。我在解决方案中有一些解释。如果有人能给我一些帮助,我将不胜感激。(很抱歉英语不是那么完美)

这是分机:

using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;

namespace ConsoleApplication2.Extensions
{
    public static class Extension
    {
        public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds)
        {
            if (timeoutInSeconds <= 0) return driver.FindElement(@by);
            var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
            return wait.Until(drv => drv.FindElement(@by));
        }



    }
}
使用系统;
使用OpenQA.Selenium;
使用OpenQA.Selenium.Support.UI;
命名空间控制台应用程序2.Extensions
{
公共静态类扩展
{
公共静态IWebElement FindElement(此IWebDriver驱动程序,By,int timeoutines)
{
if(timeoutingseconds drv.FindElement(@by));
}
}
}

我已经用Selenium编写了6个多月的代码,我遇到了与您相同的问题。我创建了这个扩展方法,它每次都适用于我

代码的作用是: 在20秒内,它每500毫秒检查一次页面上是否存在该元素。如果20秒后未找到,它将抛出异常。 这将帮助您进行动态等待

  public static class SeleniumExtensionMethods {
      public static WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
      public static void SafeClick(this IWebElement webElement) {
          try {
              wait.Until(ExpectedConditions.ElementToBeClickable(webElement)).Click();
          } catch (TargetInvocationException ex) {
              Console.WriteLine(ex.InnerException);
          }

      }
然后替换您的代码:

driver.FindElement(By.XPath("//span/ul/li/span/a")).Click();
与:


我会这么做的,但现在我正试图让你的答案适应我的解决方案,现在我还没有成功。你的答案帮助了我。这是我唯一有用的一行:wait.Until(ExpectedConditions.elementtobelickable(webElement)).Click();太好了:)请给我你的联系方式、电子邮件或其他什么。
driver.FindElement(By.XPath("//span/ul/li/span/a")).Click();
IWebElement x = driver.FindElement(By.XPath("//span/ul/li/span/a"));
x.SafeClick();