Selenium click()事件似乎不总是被触发=>导致超时?

bla*_*ube 26 java selenium timeout

这是我做的:

selenium.click("link=mylink");
selenium.waitForPageToLoad(60000);

// do something, then navigate to a different page 
// (window focus is never changed in-between)

selenium.click("link=mylink");
selenium.waitForPageToLoad(60000);
Run Code Online (Sandbox Code Playgroud)

链接"mylink"确实存在,click()的第一次调用始终有效.但是第二次点击()有时似乎有效,有时则不然.

看起来似乎根本没有触发click()事件,因为页面甚至没有开始加载.不幸的是,这种行为是不确定的.

这是我已经尝试过的:

  1. 设置更长的时间超时
    =>没有帮助

  2. 加载一个页面后等待元素存在
    =>不起作用,因为页面甚至没有开始加载

现在我最终调用了click()两次,所以:

selenium.click("link=mylink");
selenium.waitForPageToLoad(60000);

// do something, then navigate to a different page 
// (window focus is never changed in-between)

selenium.click("link=mylink");
selenium.click("link=mylink");
selenium.waitForPageToLoad(60000);
Run Code Online (Sandbox Code Playgroud)

这会奏效,但这不是一个非常好的解决方案.我也在另一个论坛上看到有人建议写一些像'clickAndWaitWithRetry'的东西:

  try {
      super.click("link=mylink");
      super.waitForPageToLoad(60000);
  }
  catch (SeleniumException e) {
      super.click("link=mylink");
      super.waitForPageToLoad(60000);
  }
Run Code Online (Sandbox Code Playgroud)

但我认为这也不是一个合适的解决方案....任何想法/解释为什么click()事件有时不会被触发?

And*_*nez 10

有时,看似随机,Selenium只是不喜欢点击某些锚标签.我不确定是什么导致它,但它发生了.在那些情况下,我发现有一个麻烦的链接,而不是做

selenium.click(...)
Run Code Online (Sandbox Code Playgroud)

selenium.fireEvent( locator, 'click' );
Run Code Online (Sandbox Code Playgroud)

正如其他人在我上面所述,我特别关注锚标记,如下所示:

<a href="javascript:...." >
Run Code Online (Sandbox Code Playgroud)

  • ASP.NET LinkBut​​ton控件将自动变为带有"javascript:__ doPostback(*"(当呈现为HTML)时的锚点.将LinkBut​​ton转换为Button非常容易.但是,如果您有一个硬编码的HTML锚标记调用JavaScript,你可能对这个工具运气不好.我认为点击永远不会发生,因为Selenium在幕后使用JavaScript,并且可能会覆盖主播的工作 - 调用JavaScript. (2认同)

Vij*_*ari 1

当您单击该页面时,该页面未正确加载。检查页面上的不同元素以确保页面已加载。

另外,请等待链接出现并可见,然后再单击它。