2012-04-05 1 views
4

Ich benutze Selenium 1.7.2 auf Firefox 11 läuft auf Ubuntu 11.10. Bis gestern haben wir das document.domain Javascript nicht benutzt. Wir mussten es zu unserem generierten HTML und in einer unserer JavaScript-Dateien hinzufügen. Nun, wenn wir Selenium IDE Test Suite ausführen, erhalten wir die folgende Fehlermeldung:Selenium IDE - Fehler: Berechtigung verweigert für <http://www.example.com> Eigenschaft zu erhalten Location.href

Error: Permission denied for <http://dev.example.com> to get property Location.href 

dev.example.com ist unser Anwendungsserver (Glassfish 3.1.2 hinter Apache + mod_jk)

Wenn ich document.domain alles funktioniert Kommentar aus gut (zumindest in Firefox, weil die document.domain ist IE zu verhindern PIE.htc Skript ... Seufzer zu blockieren)

ich ein Benutzer Erweiterung Skript versucht, das Hinzufügen here gefunden:

function setdom(str,doc,dom) { 
    doc.domain = dom; 
} 

Selenium.prototype.doDocumentDomain = function(domain) { 
    var lw; 
    setdom('ts',frames['testSuiteFrame'].document, domain); 
    setdom('tf', getTestFrame().contentWindow.document, domain); 
    setdom('my', frames['myiframe'].document, domain); 

    lw = LOG.getLogWindow(); 
    if (lw) { 
    setdom('log', lw.document, domain); 
    } 
    setdom('doc', document, domain); 
    } 

aber das sieht ziemlich alt aus und wahrscheinlich nicht mehr kompatibel. Es gibt einen Fehler beim ersten Anruf an die setdom('ts',frames['testSuiteFrame'].document,domain); Zeile

Ich bin nicht hin und her zwischen HTTP und HTTPS stöbern, ich habe viele StackOverflow und Google Group verwandte Fragen zu keinem Ergebnis gelesen.

kann ich unsere Codes ändern document.domain nur für IE zu schließen, aber es ist nicht sehr sauber ...

Frage: Wie Selenium IDE arbeiten ohne Sicherheitsproblem machen, wenn document.domain gesetzt? Oder wie kann ich die obige Benutzererweiterung reparieren, um in Selenium IDE 1.7.2 zu arbeiten? Vielen Dank.

Antwort

0

So entschied ich Selenium Javascript zu ändern, damit mir die document.domain mit diesem setzen:

In `Chrom/content/Selen-core/scripts/Selen-browserbot.js auf der Linie 920 (für die Version 1.7.2):

//Samit: Fix: open command sometimes fails if current url is chrome and new is not 
    windowObject = core.firefox.unwrap(windowObject); 
    // -------------- Start My Change ---------------- 
    updateDomain(windowObject.document); 
    // -------------- End My Change ---------------- 
    if (this._windowClosed(windowObject)) { 
     LOG.debug("pollForLoad WINDOW CLOSED (" + marker + ")"); 
     delete this.pollingForLoad[marker]; 
     return; 
    } 

dann in benutzer extensions.js:

var validDomain = null; 

Selenium.prototype.doDocumentDomain = function(domain) { 
    validDomain = domain; 
} 

function updateDomain(doc) { 
    if(validDomain==null) { 
    return; 
    } 
    LOG.info("Current domain: " + doc.domain); 
    if(doc.domain != validDomain && (doc.domain+"").indexOf(validDomain)>0) { 
    doc.domain = validDomain; 
    } 
    LOG.info("New domain: " + doc.domain); 
    } 

ich überprüfen, bevor die neue Domain einstellen, dass es eine Sub-Domain des einen ist ich festlegen möchten. Ich benutze es in Selenium IDE:

documentDomain | example.com 

Also, wenn es öffnet dev.example.com und static.example.com, findet es example.com in der Domäne und die Domäne ersetzen.

Verwandte Themen