【发布时间】:2012-03-19 07:41:47
【问题描述】:
我正在测试的网页正在使用淘汰赛。在我们网站上当前未使用淘汰赛的其他页面上,我没有遇到同样的问题。我的场景是页面打开的地方,我输入各种必填字段并单击保存按钮。在最后一个文本字段中输入值和单击保存按钮之间的某个时间点,以前具有值的字段被清除,因此脚本无法继续。这是我正在运行的代码示例:
driver.findElement(By.id("sku")).clear();
driver.findElement(By.id("sku")).sendKeys(itemNo);
driver.findElement(By.id("desktopThankYouPage")).clear();
driver.findElement(By.id("desktopThankYouPage")).sendKeys(downloadUrl);
driver.findElement(By.id("mobileThankYouPage")).clear();
driver.findElement(By.id("mobileThankYouPage")).sendKeys(mobileDownloadUrl);
driver.findElement(By.id("initialPrice")).clear();
driver.findElement(By.id("initialPrice")).sendKeys(initialPrice);
driver.findElement(By.id("submitSiteChanges")).click();
就像我说的那样,在它在最后一个字段中输入文本的时间和它单击保存之前包含文本的字段之间的时间被清除了,因此我的测试失败了。问题是它并不总是发生。有时测试运行良好,有时却不行。
我试过把 Thread.sleep(x);到处查看是否在某些点暂停可以解决问题。我也尝试过使用 javascript 在后台等待任何可能正在运行的 ajax。还有 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS) 的隐式等待。似乎没有任何区别。
我正在运行 2.13 版的 selenium 服务器,我的所有测试都在 Firefox 8 上运行。
对此的任何帮助将不胜感激!
【问题讨论】:
-
您如何确认设置的值是实际设置的。单击提交后,您的 KO 代码会发生什么?绑定到 KO 的 dom 元素是否作为模板的一部分呈现?
-
是的,在单击提交按钮之前,我已验证字段中存在值。事实上,有时测试会通过。提交按钮获取我们绑定的对象并将其转换为 JSON 并通过 ajax 将其发送到我们的 API。看来,在我们创建 JSON 之前,Web 驱动程序正在清除几个字段。
-
我怀疑网络驱动程序正在清除字段。更有可能的是,由于时间问题或事件处理程序代码中的潜在错误,页面本身正在清除字段,但是您提到添加睡眠似乎并没有解决问题。在任何字段中输入文本之前,您是否添加了很长的睡眠时间(30 秒)以完全排除时间问题?您是否在每个字段中输入文本之间添加了几秒钟的延迟以排除时间问题?
-
是的,我在页面加载时睡了很长时间,然后在输入文本到下一个字段之间也睡了。
标签: selenium knockout.js webdriver