selenium:测试"禁用提交"行为

buk*_*zor 3 selenium webdriver selenium-webdriver

我们使用Selenium WebDriver来测试具有双后预防行为的表单.有一些简单的javascript可以在点击时禁用按钮,这样用户就不会意外地发布两次相同的内容.

我们如何测试?

问题是button.click()直到下一页加载的块,此时我们当然无法断言前一页上的按钮.即使我们以某种方式得到.click()非阻挡,也存在固有的竞争条件; 如果浏览器/ javascript比测试系统快得多,它将能够在测试可以断言关于按钮的任何内容之前卸载页面.

没有javascript注入黑客的解决方案的奖励积分.

Pet*_*ček 5

基于Esc在每个浏览器和操作系统中取消页面加载的假设,这应该工作:

WebElement input = driver.findElement(By.tagName("input")); 
input.sendKeys(Keys.ENTER, Keys.ESCAPE);
Assert.assertFalse(input.isEnabled());
Run Code Online (Sandbox Code Playgroud)

它快速连续发送EnterEsc按钮,以便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)