这就是我的所作所为:
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);
}
但我认为这也不是一个合适的解决方案...... 有时为什么click()事件没有被触发的想法/解释?
答案 0 :(得分:10)
有时,看似随机,Selenium不喜欢点击某些锚标签。我不确定是什么导致它,但它发生了。在那些情况下,我发现有一个麻烦的链接,而不是做
selenium.click(...)
DO
selenium.fireEvent( locator, 'click' );
正如其他人在我上面所述,我特别遇到锚标记问题,如下所示:
<a href="javascript:...." >
答案 1 :(得分:4)
我已经做了一段时间的硒,我真的对waitForPageToLoad()产生了厌恶。您可能会考虑始终只是等待有问题的元素存在。
我发现这种方法似乎解决了我遇到的最奇怪的问题。另一种可能性是你可能有一些javascript阻止链接在第一次点击时做任何事情。这似乎不太可能,但值得仔细检查。
答案 2 :(得分:3)
我刚试过WebDriver(Selenium 2.0),发现WebElement #sendKeys(Keys.ENTER)可以正常工作。
答案 3 :(得分:3)
Selenium click()事件似乎并不总是被触发=&gt;导致超时?
在Selenium.click命令之前尝试selenium.pause。我已经尝试了以上所有,但似乎没有一个解决我们的问题。所以最后我们得到了一个魔法selenium.pause,这解决了我的问题..
希望这也能解决你的问题
答案 4 :(得分:2)
这个可行:
selenium.waitForPageToLoad("60000");
selenium.click("link= my link");
答案 5 :(得分:2)
我现在也遇到了这个问题。从我的用法来看,似乎以下是最一致的:
@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
...
# 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)
但是,正如评论所述,首先必须立即使用:wait_for命令。
当然......切换顺序会让你进入同样的等待状态。
@browser.wait_for(:wait_for => :page)
@browser.click(selector)
在不知道Selenium的所有细节的情况下,似乎Selenium需要在点击作为选项传递时注册:wait_for触发器。否则,如果你以某种方式告诉Selenium在前一瞬间等待,你可能会永远等待:wait_for被调用。
答案 6 :(得分:2)
我遇到了同样的问题 - 使用Selenium 1.0.12和Firefox 5.0;我设法以这种方式使自动化测试工作:
它是这样的:
等...
似乎“waitForVisible”过早被触发,即在事件处理程序插入控件之前(因此单击控件无效)。如果等待1秒钟,则应该插入/激活点击处理程序......
答案 7 :(得分:1)
单击时页面未正确加载。检查页面上的不同元素以确保页面已加载。
此外,等待链接显示并在您点击之前可见。
答案 8 :(得分:1)
确保在正确的位置增加超时。您发布的行是:
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);
答案 9 :(得分:1)
如果您使用的是FireFox,请确保使用的是3.6或更高版本。 WaitForPageToLoad使用javascript变量'readyState',但Firefox仅支持3.6。早期版本就是不要等待
(见org.openqa.selenium.internal.seleniumemulation.WaitForPageToLoad
)
答案 10 :(得分:0)
试试这个:
selenium.fireEvent(ID, "keypress");
答案 11 :(得分:0)
selenium.click("link=Continue to this website (not recommended).");
Thread.sleep(5000);
答案 12 :(得分:0)
我遇到了同样的问题,发现我必须先获取链接的文本。我知道这不是理想的做法,但我很幸运,我的链接具有独特的名称。
C#代码:
var text = Selenium.GetText(myLocator);
Selenium.Click("link=" + text);
答案 13 :(得分:0)
我遇到了同样的问题:(使用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)