我有一个使用webdriver点击按钮的rspec测试...点击按钮后,页面永远不会完全加载(这是预期和正确的行为)。单击按钮后,我想等待2秒,然后导航到另一个URL ...尽管页面尚未加载。我不想抛出错误,因为页面没有加载,我想忽略它,并继续,好像一切都很好。页面永远不应该加载,这是预期和正确的行为。
我怎样才能避免等到超时,其次,我怎么能没有抛出让测试失败的错误。
谢谢!
答案 0 :(得分:1)
我遇到了类似的问题,我尝试了@Sergii提到的解决方案,但遇到了以下错误:
org.openqa.selenium.JavascriptException: javascript error: element is not defined (Session info: chrome=84.0.4147.89)
作为解决方法,必须在Java脚本代码中初始化元素。
String script = "var element = document.querySelector('button[type=submit]');" +
"if (document.createEventObject){"+
"return element.fireEvent('onclick');"+
"}else{"+
"var evt = element.ownerDocument.createEvent('MouseEvents');"+
"evt.initMouseEvent('click',true,true,"+
"element.ownerDocument.defaultView,1,0,0,0,0,false,"+
"false,false,false,1,null);"+
"return !element.dispatchEvent(evt);}" ;
感谢@Sergii的回答,由于字符有限,我无法将其添加为注释,因此将其添加为单独的答案。
答案 1 :(得分:0)
WebDriver有一个阻止API,它总是等待加载页面。您可以做的是通过JavaScript按下按钮,即触发其onclick事件。我不熟悉Ruby,但在Java中它将是:
WebDriver driver = ....; // Init WebDriver
WebElement button = ....; // Find your element for clicking
String script = "if (document.createEventObject){"+
"return arguments[0].fireEvent('onclick');"+
"}else{"+
"var evt = arguments[0].ownerDocument.createEvent('MouseEvents');"+
"evt.initMouseEvent('click',true,true,"+
"element.ownerDocument.defaultView,1,0,0,0,0,false,"+
"false,false,false,1,null);"+
"return !element.dispatchEvent(evt);}" ;
((JavascriptExecutor)driver).executeScript(script, button);
在此之后,您可以等待2秒钟并继续
答案 2 :(得分:0)
为什么不尝试在waitForPageToLoad()之后使用“waiting()”的简单技巧,这使得它忽略了Selenium中的上一个命令并且从未失败过该步骤
答案 3 :(得分:0)
如果您使用RSpec的expect方法会怎样:
expect {
Thread.new() {
sleep(2)
raise RuntimeError
}
theButton.click()
}.to raise_error
答案 4 :(得分:0)
将“Enter”键发送到有问题的链接或按钮而不是点击,webdriver将不会等待页面加载并立即返回(这是在C#中,只是转换为Ruby):
element.SendKeys(键,返回);