(从Java-Selenium迁移到C#-Selenium)
使用Selenium和C#搜索显式等待时,我发现几个帖子的代码看起来类似于Java-Counterpart:
例如here:
<script type="text/javascript">
jQuery( document ).ready(function($) {
var fadeinBox = $("#box2");
var fadeoutBox = $("#box1");
function fade() {
fadeinBox.stop(true, true).fadeIn(2000);
fadeoutBox.stop(true, true).fadeOut(2000, function() {
var temp = fadeinBox;
fadeinBox = fadeoutBox;
fadeoutBox = temp;
setTimeout(fade, 1000);
});
}
fade();
}); </script>
或here:
WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0,0,5));
wait.Until(By.Id("login"));
WebDriverWait来自OpenQA.Selenium.Support.UI命名空间,并且位于一个名为Selenium WebDriver支持类的单独包中
BUT:
当我尝试在Visual Studio中编写代码(通过NuGet获取Selenium包)时,在我的代码中使用WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("locator")));
将提示消息:
类型或命名空间名称&#39; WebDriverWait&#39;找不到(是你吗? 缺少using指令或程序集引用?)
即使我通过
包含Selenium参考WebDriverWait
查找documentation for WebDriverWait时会发现,应该有一个名为
的命名空间OpenQA.Selenium.Support.UI
但我无法通过&#34;使用&#34;在我的代码中。
为什么会这样?我在哪里可以找到WebDriverWait类?
答案 0 :(得分:57)
幸运的是,我有时也会将评论读到答案中,所以我在排名最高的评论here中偶然发现了解决方案:
WebDriverWait [是]来自OpenQA.Selenium.Support.UI命名空间和 来自一个名为Selenium WebDriver支持类的单独包 在NuGet上
谢谢@Ved!
在Visual Studio中,这意味着您需要安装两个软件包:
来自Java与Maven,这不是微不足道的(至少对我来说;-),因为直到现在我只需要包含一个且只有一个依赖来获得所有好东西&#34;像这样:
using OpenQA.Selenium;
*将此问题作为一个问题包括答案,因为我花了太多时间和运气来绊倒答案。
答案 1 :(得分:3)
您是否尝试过添加?
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项目中。一旦我这样做并使用上面的说明,它对我有用。
答案 2 :(得分:0)
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")));
答案 3 :(得分:-1)
Selenium.WebDriver.WaitExtentions。