【问题标题】:Cannot find WebDriverWait class in OpenQA.Selenium (C#)在 OpenQA.Selenium (C#) 中找不到 WebDriverWait 类
【发布时间】:2015-12-15 13:46:41
【问题描述】:

(从 Java-Selenium 迁移到 C#-Selenium)

在使用 Selenium 和 C# 搜索 explicit waits 时,我发现一些帖子的代码类似于 Java-Counterpart:

例如here:

WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0,0,5));
wait.Until(By.Id("login"));

here:

WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("locator")));

WebDriverWait 来自 OpenQA.Selenium.Support.UI 命名空间,并位于名为 Selenium WebDriver Support Classes 的单独包中

但是:
当我尝试在 Visual Studio 中自己编写代码时(通过 NuGet 获取 Selenium 包),在我的代码中使用 WebDriverWait 将提示消息:

找不到类型或命名空间名称“WebDriverWait”(您是 缺少 using 指令或程序集引用?)

即使我通过

包含了 Selenium 参考
using OpenQA.Selenium;

当查找documentation for WebDriverWait 时,您会发现,应该有一个命名空间

OpenQA.Selenium.Support.UI

但我无法通过代码中的“使用”访问它。

为什么会这样?在哪里可以找到 WebDriverWait 类?

【问题讨论】:

    标签: c# selenium selenium-webdriver


    【解决方案1】:

    WebDriverWait 在 OpenQA.selenium 中不可用。它可用的 SeleniumExtras.WaitHelpers

        using OpenQA.Selenium;
        using SeleniumExtras.WaitHelpers;
            
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
      wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.Id("Test")));
    

    【讨论】:

      【解决方案2】:

      Selenium.WebDriver.WaitExtentions.

      【讨论】:

      • IWebDriver driver = new ChromeDriver(); driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSecound(1)); driver.FindElement(By.Id("Login"));
      【解决方案3】:

      幸运的是,我有时也会阅读 cmets 以获得答案,所以我在排名最高的评论 here 中偶然发现了解决方案:

      WebDriverWait [is] 来自 OpenQA.Selenium.Support.UI 命名空间和 包含在一个名为 Selenium WebDriver Support Classes 的单独的包中 在 NuGet 上

      谢谢@Ved!

      在 Visual Studio 中,这意味着您需要安装两个包:

      • NuGet 包“Selenium.WebDriver”以及
      • NuGet 包“Selenium.Support

      来自 Java 和 Maven,这不是微不足道的(至少对我而言 ;-),因为直到现在我只需要包含一个且只有一个依赖项即可获得“所有好东西”,如下所示:

      <dependency>
          <groupId>org.seleniumhq.selenium</groupId>
          <artifactId>selenium-java</artifactId>
          <version>2.46.0</version>
      </dependency>
      

      * 将此作为包含答案的问题发布,因为我花了太多时间和运气才发现答案。

      【讨论】:

      • 您是否在 Selenium 网站上下载了 C#/.Net 包?那里应该有4个DLL。如果您添加对所有 4 个的引用,您应该会很好。这就是我所做的一切,它对我有用。我从不使用 NuGet。
      • @JeffC 不,我使用了 NuGet - thx 提示,将更新我的问题!
      • 您应该接受自己的答案,因为您知道它有效。让那些试图为自己找到解决方案的阅读此问题的人更清楚。
      • 我只能在 2 天内接受它;-) 但无论如何感谢支持
      • 嗨!我有两个包(Selenium Support 3.141.0 和 Selenium.WebDriver),但仍然无法使用 WebDriverWait。有什么想法吗?
      【解决方案4】:

      你试过添加吗?

      using OpenQA.Selenium.Support.UI;
      

      这应该就是你所需要的。根据您的 IDE,它可能 (?) 将有一个帮助程序来查找和添加缺失的引用。我使用 Visual Studio。我只是输入我知道应该在那里的内容。当 IDE 在 WebDriverWait 上添加红色曲线时,我将鼠标悬停在它上面,它会显示一个工具提示,提示我缺少参考,然后我单击链接,显示潜在修复。在新的工具提示中,它显示了几个选项,通常第一个是添加using 语句。我点击那个,红色的波浪线消失了。

      我真的很喜欢 Visual Studio,但过去 9 个月左右我一直在使用 Eclipse,我更喜欢 Eclipse 处理这个问题的方式。我认为它更直观......但这只是我。


      编辑

      只是想向未来的读者说明...我不使用 NuGet。我只需下载 Selenium .Net 包并将 4 个 DLL 放在我的项目中/附近,然后将所有 4 个 DLL 的引用添加到我的 Visual Studio 项目中。一旦我这样做并使用上面的说明,它就对我有用。

      【讨论】:

      • 不,这不起作用,当您使用 NuGet -> 搜索 Selenium 并添加出现的第一个包,即 Selenium.WebDriver,这不包括 Support 类,这就是为什么正如我的回答一样,您需要加载另一个名为“Selenium Support”的 NuGet Packag
      • 我没有为安装 Selenium .Net 包的方式添加额外说明,因为为了清楚起见,我没有使用下面对话中的 NuGet...
      • 是的,没有 NuGet 我认为一个更习惯于添加“几个”引用,但是使用 NuGet,与 Maven 一样,您通常只需添加一个依赖项/包,这非常方便。如此方便和习惯,我找不到为什么我无法访问 WebDriverWait 的解决方案 ;-)
      • 是的,不只有一个 NuGet 包包含所有 4 个 DLL,这似乎很奇怪。全部 4 个只有 4MB。
      • 很高兴听到我不是唯一一个发现这个奇怪的人 -> 我想既然我们现在是两个人,那么问题和答案是有道理的 ;-)
      猜你喜欢
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      相关资源
      最近更新 更多