我们如何获得硒来识别页面已加载?

时间:2020-03-06 14:19:11  来源:igfitidea点击:

在某些未知情况下,硒在使用open方法时不会检测到页面已加载。我正在使用Java API。例如(此代码不会产生此错误。我不知道会出现外部可见的页面。):

Selenium browser = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.google.com");
browser.start();
browser.open("http://www.google.com/webhp?hl=en");
browser.type("q", "hello world");

发生错误时,即使我们可以清楚地看到在超时发生之前页面已成功加载,对"打开"的调用也会超时。增加超时时间无济于事。对"类型"的调用永远不会发生,不会取得任何进展。

发生此错误时,如何使硒识别页面已加载?

解决方案

当我进行硒测试时,我等待看某个元素是否可见(waitForVisible),然后执行我的操作。我通常会尝试在我输入的元素之后使用一个元素。

启用" multiWindow"功能可以解决此问题,尽管我不清楚原因为何。

SeleniumServer(int端口,布尔slowResources,布尔multiWindow)

SeleniumServer server = new SeleniumServer(4444, false, true);

任何澄清将是有帮助的。

使用Selenium通过iFrames测试应用程序时,我遇到了类似的问题。基本上,似乎一旦加载了主页(包含iframe的页面),Selenium就无法确定iframe内容何时完成加载。

从查看我们要加载的链接的源代码来看,似乎有一些Javascript在页面加载后会创建其他页面元素。我不确定,但是这可能是导致问题的原因,因为它看起来与我上面遇到的情况相似。

在加载静态页面时,我们会遇到同样的错误吗? (即,带有直接html的内容)

如果我们找不到更好的答案,请尝试Selenium论坛,他们通常都很活跃,Selenium开发人员的确回答了很好的问题。

http://clearspace.openqa.org/community/selenium_remote_control

另外,如果我们还没有尝试过,请在打开调用之后添加对browser.WaitForPageToLoad(" 15000")的调用。我发现在每次页面转换之后执行此操作会使我的测试更加稳定,即使从技术上讲它不是必需的。 (当Selenium检测到页面实际已加载时,它将继续,因此实际的超时变量并不是真正的问题。

使用" openAndWait"代替" open"可以解决问题。

从网站:

Many Actions can be called with the "AndWait" suffix, e.g. "clickAndWait". This suffix tells Selenium that the action will cause the browser to make a call to the server, and that Selenium should wait for a new page to load.