Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Selenium click()事件似乎并不总是被触发=>;导致超时?_Java_Selenium_Timeout - Fatal编程技术网

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

Java Selenium click()事件似乎并不总是被触发=>;导致超时?,java,selenium,timeout,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); 链接“mylink

我是这样做的:

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);
链接“mylink”确实存在,第一次调用click()总是有效的。但是第二次单击()有时似乎有效,有时无效

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

以下是我已经尝试过的:

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

  • 加载一页后等待元素出现
    =>也不起作用,因为页面甚至没有开始加载

  • 现在我调用了两次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);
    
    这会起作用,但这不是一个很好的解决方案。我也在另一个论坛上看到有人建议写一些类似“clickAndWaitWithRetry”的东西:

      try {
          super.click("link=mylink");
          super.waitForPageToLoad(60000);
      }
      catch (SeleniumException e) {
          super.click("link=mylink");
          super.waitForPageToLoad(60000);
      }
    
    但我认为这也不是一个恰当的解决办法。。。。
    单击()事件有时未触发的原因有何想法/解释?

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


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

    确保在正确的位置增加超时时间。您发布的行是:

    selenium.click("link=mylink");
    selenium.waitForPageToLoad(60000);
    
    此等待是在单击后返回的页面加载。但您描述的问题是,尝试单击时失败。所以,确保在这之前增加等待时间

    selenium.click("link=mylink");
    selenium.waitForPageToLoad(60000);
    
    // do something, then navigate to a different page 
    // (window focus is never changed in-between)
    // after the last click in these steps:
    selenium.waitForPageToLoad(60000);
    // anything else that happened after that
    
    selenium.click("link=mylink");
    selenium.waitForPageToLoad(60000);
    

    我做selenium已经有一段时间了,我真的不喜欢waitForPageToLoad()。您可能会一直考虑只等待问题中存在的元素。
    我发现这个方法似乎解决了我遇到的最奇怪的问题。另一种可能性是,您可能有一些javascript阻止链接在第一次单击时执行任何操作。这似乎不太可能,但值得仔细检查。

    有时候,Selenium似乎是随机的,只是不喜欢点击某些锚定标签。我不确定是什么原因造成的,但它确实发生了。我发现在这些情况下,w/a链接很麻烦,而不是

    selenium.click(...)
    

    正如其他人在我上面所述,我对锚定标签有如下问题:

    <a href="javascript:...." >
    
    
    
    我刚刚尝试了WebDriver(Selenium 2.0),发现WebElement#sendKeys(Keys.ENTER)可以工作。

    尝试以下方法:

    selenium.fireEvent(ID, "keypress");
    

    在这里,这一个将起作用:

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

    我也遇到了同样的问题,我发现我必须先得到链接的文本。我知道这不是一个理想的方式,但我很幸运我的链接是唯一命名的

    C#代码:


    我也有同样的问题:(使用selenium IDE 1.0.10、phpunit 3.5、selenium RC server 1.0.3)

     EDITED: 
     The culprit seems to be browser FF 3.6.13 , after upgrade to FF 3.6.14
      all my errors are  gone . My tests are working like charm :). 
    
     Selenium IDE 1.0.10
     PHPUnit: 3.5.6
     Selenium Server:selenium-2.0b1 (selenium-2.0b2 is buggy)
    

    我现在也遇到了这个问题。从我对这个的使用来看,似乎以下是最一致的:

    @browser.click(selector, {:wait_for => :page})
    
    不太清楚为什么会这样。但如果你这样做:

    @browser.click(selector)
       [maybe some stuff here too]
    @browser.wait_for(:wait_for => :page)
    
    然后,您可能会等待一个已经加载的页面(即,您将永远等待)

    我深入研究了Selenium源代码,发现了以下要点:

      def click(locator, options={})
        remote_control_command "click", [locator,]
        wait_for options
      end
    

    基本上,这是在做以下工作:

    @browser.click(selector)
    @browser.wait_for(:wait_for => :page)
    
    但是,正如注释所述,第一件必要的事情是在之后立即使用:wait_for命令

    当然…切换顺序会让你进入同样的等待状态

    @browser.wait_for(:wait_for => :page)
    @browser.click(selector)
    

    在不了解Selenium的所有细节的情况下,似乎Selenium需要注册:wait_for trigger,当它作为一个选项通过click传递时。否则,如果你告诉Selenium在调用:wait_for之前等待一瞬间,你可能会永远等待下去。

    如果你使用的是FireFox,请确保你使用的是3.6或lat呃。 WaitForPageToLoad使用javascript变量“readyState”,但Firefox仅在3.6中支持该变量。早期版本不需要等待

    (请参见
    org.openqa.selenium.internal.seleniumemulation.WaitForPageToLoad

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

    尝试selenium.pause before selenium.click命令。我已经尝试了以上所有方法,但它们似乎都不能解决我们的问题。因此,最终我们得到了一个神奇的selenium.pause,它为我解决了问题


    希望这也能解决您的问题

    我也遇到了同样的问题-使用Selenium 1.0.12和Firefox 5.0;我设法以这种方式实现了自动测试:

    • 我删除了所有的“AndWait”命令(有时它们会挂起测试/浏览器)
    • 我在单击之前添加了暂停
    • 我在单击后添加了一个waitForVisible(通常我会等待下一页上要与之交互的下一个html控件)
    事情是这样的:

    • waitForVisible好的
    • 暂停1000
    • 单击“确定”
    • waitForVisible链接=Go
    • 暂停1000
    • 单击“开始”
    等等


    “waitForVisible”似乎触发得太快,即在事件处理程序插入控件之前(因此,单击控件无效)。如果等待1秒,则足以插入/激活单击处理程序…

    显示链接已完全加载的页面(waitForElement成功)。这只是一个正常的html链接(),没有JS交互。该链接位于导航菜单中,正如我之前所写的,第一次单击有效,但第二次单击()事件似乎没有触发。嘿,就连我也面临javascript超链接问题。我有一个带有href=“javascript:;”的按钮。当我使用selenium rc单击它时,浏览器的状态栏显示“javascript:;”,但是,没有任何动作发生。有什么解决方法吗?-Vamyipt发生这种情况时,我尝试的第一件事是使用mouseDown和mouseUp,而不是单击。这通常会起作用,即使它有点傻。@blackicecube这确实很旧,但如果你在最后分享你所做的事情,那会很好。你说页面已完全加载,但看起来正如我提到的,你是在第一次点击之前谈论的
      def click(locator, options={})
        remote_control_command "click", [locator,]
        wait_for options
      end
    
      # Waits for a new page to load.
      #
      # Selenium constantly keeps track of new pages loading, and sets a
      # "newPageLoaded" flag when it first notices a page load. Running
      # any other Selenium command after turns the flag to false. Hence,
      # if you want to wait for a page to load, you must wait immediately
      # after a Selenium command that caused a page-load.
      #
      # * 'timeout_in_seconds' is a timeout in seconds, after which this
      #   command will return with an error
      def wait_for_page(timeout_in_seconds=nil)
        remote_control_command "waitForPageToLoad",
            [actual_timeout_in_milliseconds(timeout_in_seconds),]
      end
      alias_method :wait_for_page_to_load, :wait_for_page
    
    @browser.click(selector)
    @browser.wait_for(:wait_for => :page)
    
    @browser.wait_for(:wait_for => :page)
    @browser.click(selector)