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()事件根本没有被触发,因为页面甚至没有开始加载。不幸的是,这种行为是不确定的
以下是我已经尝试过的:
=>没有帮助
=>也不起作用,因为页面甚至没有开始加载
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)