我正在使用Selenium的WebDriver为我正在进行自我教育的ASP.NET MVC应用程序运行一些SpecFlow测试.
使用FirefoxDriver,ChromeDriver等所有需要很长时间来运行,它实际上是非常令人沮丧的使用(在我看来).
我读过一个HtmlUnitDriver据说比基于浏览器的驱动程序快得多的内容; 但我似乎无法在.NET客户端库中找到一个版本(只有Java).那里有.NET版本吗?
我遇到了Selenium WebDriver的问题.我尝试点击窗口页面外的链接(你需要向上滚动才能看到它).我目前的代码是相当标准的:
menuItem = driver.findElement(By.id("MTP"));
menuItem.click();
// I also tried menuItem.sendKeys(Keys.RETURN);
Run Code Online (Sandbox Code Playgroud)
我知道我可以向上滚动,在这种情况下它会起作用.但是如果你有很长的项目列表,你不一定知道你需要向下滚动多远.
有没有办法点击不在页面可见部分的链接(但滚动时会显示)?
作为旁注,我正在使用Firefox,但我打算也使用IE7/8/9和Chrome.
任何帮助将不胜感激.
编辑:我担心我不能提供源代码,因为我工作的公司不允许它,但我可以给出我想点击的链接的代码:
<div class="submenu">
<div id="MTP">Link title</div>
</div>
Run Code Online (Sandbox Code Playgroud)
链接可见时,完全相同的代码有效,只有当链接不可用时才能使用.
编辑2:实际上,奇怪的是,它不会引发任何异常,只是转到下一条指令.所以基本上,会发生什么:
menuItem = driver.findElement(By.id("MTP")); // no exception
menuItem.click(); // no exception
//... some code ensuring we got to the next page: timeout reached
driver.findElement(By.id("smLH")).click(); // NoSuchElementException, as we're on the wrong page.
Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何通过HTTP代理路由我的请求.
我正在初始化这样的webdriver:
user_agent = 'my user agent 1.0'
DesiredCapabilities.PHANTOMJS['phantomjs.page.settings.userAgent'] = user_agent
driver = webdriver.PhantomJS()
Run Code Online (Sandbox Code Playgroud)
我已经浏览了文档和源代码,似乎无法通过webdriver找到使用phantomjs代理服务器的方法.
有什么建议?
我认为每个人如何使用Webdriver进行测试自动化必须意识到它对Web开发的巨大优势.
但如果文件上传是您的网络流量的一部分,那么存在一个巨大的问题.它不再是测试自动化.浏览器的安全限制(调用文件选择)实际上使得无法自动化测试.
Afaik唯一的选择是让webdriver单击文件上传按钮,睡眠线程,让开发人员/测试人员手动选择文件,然后执行其余的Web流程.
如何解决这个问题,有没有解决方法呢?因为它真的不能这样做.这没有意义.
这是我所知道的浏览器安全限制不适用的唯一情况:
<script language=javascript>
function window.onload(){
document.all.attachment.focus();
var WshShell=new ActiveXObject("WScript.Shell")
WshShell.sendKeys("D:\MyFile.doc")
}
</script>
Run Code Online (Sandbox Code Playgroud) 我想知道,如何使用selenium/webdriver下载页面的图像.假设需要用户会话来下载图像,因此具有纯URL是没有用的.任何示例代码都非常受欢迎.
在对页面对象进行建模时,如何处理具有表单和大约50个输入字段的页面?这里的最佳做法是什么?
您是否会为每个输入操作创建一个页面对象并编写一个单独的函数?或者你会写一个函数,哪些参数传递给它并输入文本?
例如
public void enterFirstName(String firstName) {
driver.type("firstNameField", firstName);
}
public void enterSecondName(String secondName) {
driver.type("secondNameField", secondName);
}
Run Code Online (Sandbox Code Playgroud)
要么
public void fillInForm(String inputFieldName, String text) {
driver.type(inputFieldName, text);
}
Run Code Online (Sandbox Code Playgroud)
我可以在第一个模型中看到,在编写测试时,测试更具描述性,但如果页面包含太多输入字段,则创建页面对象会变得很麻烦.
在使用Selenium WebDriver的页面对象功能自动化测试最佳实践中构建硒测试时,这篇文章也非常有趣
如何检查selenium web元素是否包含特定的css类.
我有这个html li元素
<li class="list-group-item ng-scope active" ng-repeat="report in lineageController.reports" ng-click="lineageController.activate(report)" ng-class="{active : lineageController.active == report}">
Run Code Online (Sandbox Code Playgroud)
正如您在class属性中看到的那样,有一个活动类.
我的问题是我有这个元素,我想根据类属性是否具有其他的"活动"值进行检查,然后使用xpath更优雅的解决方案.
我怎样才能做到这一点?
我有一些针对Firefox和Internet Explorer 9的Selenium 2 Webdriver测试用例.当我在IE9(Windows 7 64位)上访问https URL时,我得到"此网站的安全证书存在问题".此时测试挂起并最终失败.我试过了:
最后,我没有管理员访问我的电脑 - 例如没有访问组策略.Selenium 2 Webdriver在Firefox上运行良好.我在IE Internet选项中启用了所有安全区域,如果我在其他URL(http)上运行测试,则没有问题.
有人有解决这个问题的方法吗?有没有人现在热门使用browsermob代理(或任何其他代理)有效地克服这个问题?
谢谢,达摩
我对Selenium很新,所以我很抱歉这是一个愚蠢的问题.我已成功将IntelliJ(Play!框架)与Selenium连接起来,并使用firefoxDrivers创建了一些测试.
我正在尝试检查页面是否已经过正确验证.
长话短说,我选择了这样一个元素:
WebElement smallDecel = firefoxDriver.findElement(By.cssSelector("#configTable tr:nth-child(2) td .playerDecelInput"));
Run Code Online (Sandbox Code Playgroud)
我做了一些进一步的操作(清除并更改值,提交'表单'),然后我想检查输入所在的TD是否给了另一个类.
所以,问题是 - 是否有一种简单的技术可以用来确定WebElement/DOM是否指定了类?
当使用隐式等待时,正如这里所建议的那样,我仍然有时想要断言元素的直接不可见性或不存在.
换句话说,我知道应该隐藏一些元素,并且希望我的测试能够快速地进行断言,而不需要花费几秒钟因为(否则有用)隐式等待.
我试过的一件事就是像这样的辅助方法:
// NB: doesn't seem to do what I want
private boolean isElementHiddenNow(String id) {
WebDriverWait zeroWait = new WebDriverWait(driver, 0);
ExpectedCondition<Boolean> c = invisibilityOfElementLocated(By.id(id));
try {
zeroWait.until(c);
return true;
} catch (TimeoutException e) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
但是在上面的代码中,调用until()仅在隐式等待时间过去后才返回,即它不能完成我想要的操作.
到目前为止,这是我发现的唯一方法:
@Test
public void checkThatSomethingIsNotVisible() {
turnOffImplicitWaits();
// ... the actual test
turnOnImplicitWaits();
}
Run Code Online (Sandbox Code Playgroud)
...例如turnOffImplicitWaits(),Selenium超类中的助手:
protected void turnOffImplicitWaits() {
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
} …Run Code Online (Sandbox Code Playgroud)