繁体   English   中英

在 OpenQA.Selenium (C#) 中找不到 WebDriverWait 类

[英]Cannot find WebDriverWait class in OpenQA.Selenium (C#)

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

在使用 Selenium 和 C# 搜索显式等待时,我发现有几篇文章的代码看起来类似于 Java-Counterpart:

例如这里

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

在这里

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 指令或程序集引用?)

即使我通过

using OpenQA.Selenium;

在查找WebDriverWait文档时,您会发现,应该有一个名为

OpenQA.Selenium.Support.UI

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

为什么会发生这种情况? 在哪里可以找到 WebDriverWait 类?

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

WebDriverWait [是] 来自 OpenQA.Selenium.Support.UI 命名空间,并在 NuGet 上名为 Selenium WebDriver Support Classes单独包中

谢谢@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>

* 将此作为一个包含答案的问题发布,因为我花了太多时间和运气来绊倒答案。

你试过添加吗?

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 项目中。 一旦我这样做并使用上面的说明,它就对我有用。

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")));

Selenium.WebDriver.WaitExtentions。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM