gpt4 book ai didi

Selenium :测试 "disable on submit"行为

转载 作者:行者123 更新时间:2023-12-03 23:14:10 27 4
gpt4 key购买 nike

我们正在使用 Selenium WebDriver 来测试具有双重发布预防行为的表单。有一些简单的 javascript 可以在单击时禁用按钮,这样用户就不会不小心将同一内容发布两次。

我们如何测试它?

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

没有 javascript 注入(inject)黑客的解决方案的奖励积分。

最佳答案

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

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

它快速连续地向按钮发送 EnterEsc,因此 JavaScript 被触发,但页面加载没有机会开始。唯一的问题我可以看到,除非您刷新并发送新表格,否则您将无法通过此测试进入下一页。但无论如何,我们一次只能测试一个功能,所以你没问题 ;-)。


编辑(处理您的评论)

事实上,是的!您可以尝试通过 The Advanced User Interactions API 同时发送点击和 Esc 键。 (JavaDocs)。 您还可以通过这种方式实现非阻塞点击。

无论如何,这种方法仍然发送两个请求,这不是可以想象的最快的事情,但它(有时勉强)通过了我的测试,所以你可以试一试:

WebElement input = driver.findElement(By.tagName("input"));
new Actions(driver)
.click(input)
.sendKeys(input, Keys.ESCAPE)
.perform();

测试环境: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>

关于 Selenium :测试 "disable on submit"行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14491608/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com