5

我使用单击按钮的 webdriver 进行了 rspec 测试...单击按钮后,页面永远不会完全加载(这是预期的正确行为)。单击按钮后,我想等待 2 秒钟,然后导航到不同的 URL……尽管页面尚未加载。我不想因为页面尚未加载而引发错误,我只想忽略它,并继续前进,就好像一切都很好。页面永远不应该加载,这是预期的正确行为。

我怎样才能避免等到超时,其次,我怎样才能不引发导致测试失败的错误。

谢谢!

4

5 回答 5

1

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 秒钟并继续

于 2011-03-07T12:01:01.953 回答
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 的回答,由于字符有限,我无法将此添加为评论,因此将其添加为单独的答案。

于 2020-07-18T16:19:36.457 回答
0

你为什么不尝试一个简单的技巧,在 waitForPageToLoad() 之后使用“waiting()”,它可以忽略 Selenium 中的前一个命令并且永远不会失败该步骤

于 2011-03-16T16:54:43.250 回答
0

将“Enter”键发送到相关链接或按钮而不是单击,webdriver 不会等待页面加载并立即返回(这是在 C# 中,只需转换为 Ruby):

element.SendKeys(Key,Return);

于 2011-04-27T22:38:10.310 回答
0

如果你使用 RSpec 的 expect 方法会怎样:

expect {
  Thread.new() {
    sleep(2)
    raise RuntimeError
  }
  theButton.click()
}.to raise_error
于 2011-04-25T14:26:27.983 回答