buk*_*zor 3 selenium webdriver selenium-webdriver
我们使用Selenium WebDriver来测试具有双后预防行为的表单.有一些简单的javascript可以在点击时禁用按钮,这样用户就不会意外地发布两次相同的内容.
我们如何测试?
问题是button.click()直到下一页加载的块,此时我们当然无法断言前一页上的按钮.即使我们以某种方式得到.click()非阻挡,也存在固有的竞争条件; 如果浏览器/ javascript比测试系统快得多,它将能够在测试可以断言关于按钮的任何内容之前卸载页面.
没有javascript注入黑客的解决方案的奖励积分.
基于Esc在每个浏览器和操作系统中取消页面加载的假设,这应该工作:
WebElement input = driver.findElement(By.tagName("input"));
input.sendKeys(Keys.ENTER, Keys.ESCAPE);
Assert.assertFalse(input.isEnabled());
Run Code Online (Sandbox Code Playgroud)
它快速连续发送Enter和Esc按钮,以便JavaScript被触发,但页面加载没有机会踢.我能看到的唯一问题是你将无法进入下一页测试,除非您刷新并发送新表单.但是我们应该一次只测试一个功能,所以你很好;-).
编辑(解决你的评论)
其实,是!您可以尝试Esc通过高级用户交互API(JavaDocs)同时发送单击和密钥.您也可以通过这种方式实现非阻止点击.
无论如何,这种方法仍然发送两个请求,这不是可以想象的最快的事情,但它(有时几乎没有)通过我的测试,所以你可以尝试一下:
WebElement input = driver.findElement(By.tagName("input"));
new Actions(driver)
.click(input)
.sendKeys(input, Keys.ESCAPE)
.perform();
Run Code Online (Sandbox Code Playgroud)
测试环境:IE8和FF18带有本地存储的文件和Selenium 2.29.1; 赢得XP SP3.测试文件如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Test</title>
</head>
<body>
<a href="http://google.com/">
<input type="button" value="Hello." onclick="this.disabled='true';" />
</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1938 次 |
| 最近记录: |