Selenium-IDE: Lösung für found an old pageLoadError
(Kommentare: 0)
Meine Selenium-IDE warf nach Upgrade auf 1.6.0 und Firefox 10.0 bei waitForPageToLoad einer Seite mit Facebook-Like-Button Exceptions, die das wait abbrachen. Alle Tests schlugen daher fehl. Doof.
Fehlermeldungen von Selenium waren:
isNewPageLoaded found an old pageLoadError: Error: <http://www.facebook.com> wurde die Erlaubnis für das Lesen der Eigenschaft Location.href verweigert.
<http://www.facebook.com> wurde die Erlaubnis für das Lesen der Eigenschaft Location.href verweigert.
Hier mein Workaround. Im Testcase rufe ich waitForMyPageToLoad statt waitForPageToLoad auf. Diese Funktion habe ich in einer user-extensions.js definiert:
/* Write this code to a user-extensions.js file and integrate into Selenium IDE. */
/** Workaround / solution for problem that Selenium throws Exception while
* waiting for page to load with error message like:
* isNewPageLoaded found an old pageLoadError:
* "Permission denied for <http://www.facebook.com> to get property Location.href"
* or "<http://www.facebook.com> wurde die Erlaubnis für das Lesen der Eigenschaft Location.href verweigert".
*
* Usage: Use command waitForMyPageToLoad instead of waitForPageToLoad as test case step's command with your timeout value as parameter.
*/
Selenium.prototype.doWaitForMyPageToLoad = function(timeout) {
if (window["proxyInjectionMode"] == null || !window["proxyInjectionMode"]) {
if (timeout == null) {
timeout = this.defaultTimeout;
}
return Selenium.decorateFunctionWithTimeout(fnBind(this._isMyNewPageLoaded, this), timeout);
}
};
/** New function to check whether page is loaded.
* If isNewPageLoaded() throws exception then check whether it is the "old pageLoadError" /
* "facebook" exception, and if so, log a warning and go on. If not, throw exception.
*/
Selenium.prototype._isMyNewPageLoaded = function() {
var r = false;
try {
r = this.browserbot.isNewPageLoaded();
} catch (e) {
LOG.warn(e.message);
if (!(
e.message.match(/isNewPageLoaded found an old pageLoadError/)
|| e.message.match(/http:..www.facebook.com/)
)) {
throw e;
}
}
return r;
};
Hinweise zum Integrieren der eigenen User Extension: http://seleniumhq.org/docs/08_user_extensions.html#using-user-extensions-with-selenium-ide.
(Hilfreich dabei war diese Seite hier: http://www.koders.com/javascript/fid3452D5B065B8C79FB99A16F976787F01A0A9F413.aspx)
(English abstract: Problem: Selenium-IDE throws exception with error message "isNewPageLoaded found an old pageLoadError, Permission denied for <http://www.facebook.com> to get property Location.href" using waitForPageToLoad command waiting for a page with facebook like button.
This error broke the waitForPageToLoad and marked the test case as failed. My solution: a new waitForMyPageToLoad command in my user-extensions.js, code see above.)
Kommentare
Einen Kommentar schreiben