7 Stimmen

Wie füge ich einen JQuery Locator zu Selenium Remote Control hinzu?

Ich habe mit XPath mit Selenium ganz glücklich und sogar mit getEval mit einem aber von Javascript, aber ein Kollege sagte, wäre es nicht toll, in der Lage sein, JQuery Selektoren in Selenium verwenden.

Ich habe gegoogelt, kann aber keine Artikel finden, die für mich geeignet sind. Könnte jemand eine umfassende Anleitung, wie man JQuery-Syntax verwenden, um doc-Elemente und ihre jeweiligen Werte aus Selenium zu extrahieren.

Ich benutze C#, um meine Selenium-Tests zu schreiben, wenn also irgendwelche Beispiele aus einer C#-Perspektive sein könnten, wäre das großartig.

Merci

9voto

Aaron Silverman Punkte 20975

Karl Swedberg hat einen ausgezeichneten Blogeintrag darüber geschrieben, den Sie unter folgender Adresse finden http://www.learningjquery.com/2009/04/better-stronger-safer-jquerify-bookmarklet

Wir haben dies angepasst und in der Selenium Server jar-Datei die Datei RemoteRunner.html so geändert, dass sie das jquery-JavaScript enthält (erhalten von http://code.jquery.com/jquery-latest.min.js ):

        <script language="JavaScript" type="text/javascript" src="jquery.min.js"></script>
        <script language="JavaScript" type="text/javascript">
            function openDomViewer() {
                var autFrame = document.getElementById('selenium_myiframe');
                var autFrameDocument = new SeleniumFrame(autFrame).getDocument();
                this.rootDocument = autFrameDocument;
                var domViewer = window.open(getDocumentBase(document) + 'domviewer/domviewer.html');
                return false;
            }
        </script>

Um diese dann für die Verwendung in Selenium zu aktivieren, fügen wir die Standortstrategie hinzu:

mySelenium.addLocationStrategy("jquery",
            "var loc = locator; " +
            "var attr = null; " +
            "var isattr = false; " +
            "var inx = locator.lastIndexOf('@'); " +

            "if (inx != -1){ " +
            "   loc = locator.substring(0, inx); " +
            "   attr = locator.substring(inx + 1); " +
            "   isattr = true; " +
            "} " +

            "var found = jQuery(inDocument).find(loc); " +
            "if (found.length >= 1) { " +
            "   if (isattr) { " +
            "       return found[0].getAttribute(attr); " +
            "   } else { " +
            "       return found[0]; " +
            "   } " +
            "} else { " +
            "   return null; " +
            "}"
        );

Beachten Sie die obige Zugabe von Locator-Strategie ist in Java, aber seine nur eine Zeichenfolge so sollte leicht in C# repliziert werden. JQuery macht die Dinge viel schneller, vor allem im Internet Explorer!

Um das Jar zu ändern, können Sie das heruntergeladene Selenium-Server-Jar mit dem Java-Befehlszeilen-Tool aktualisieren. Erstellen Sie einen Ordner auf der gleichen Ebene wie das jar mit dem Namen "core" und legen Sie die geänderten Dateien RemoteRunner.html und jquery.min.js dort ab. Führen Sie dann etwas aus wie:

jar -uf selenium-server-standalone-2.0b3-APT.jar core\RemoteRunner.html
jar -uf selenium-server-standalone-2.0b3-APT.jar core\jquery.min.js

Wenn jar nicht in Ihrem Pfad enthalten ist, können Sie den vollständigen Pfad verwenden, z. B. könnten Sie es unter Windows mit etwas wie:

"C:\Program Files\Java\jdk1.6.0_22\bin\jar.exe" <arguments>

0voto

PetersenDidIt Punkte 25408

Sie müssen eine neue Standortstrategie definieren, indem Sie die AddLocationStrategy Methode und müssen jQuery in Ihre Datei user-extensions.js aufnehmen.

0voto

Lei Cao Punkte 437

Sie können lesen und execute_script, um jQuery zu aktivieren:

  • Zunächst können Sie das jquery aus einer jquery.js oder jquery.min.js Datei lesen.
  • Dann verwenden Sie execute_script(jquery), um jquery dynamisch zu aktivieren.
  • Jetzt können Sie mit Jquery interagieren.

Hier ist etwas Code in Python, andere Sprachen wären ähnlich:

browser = webdriver.Firefox() # Get local session of firefox

with open('jquery.min.js', 'r') as jquery_js: #read the jquery from a file
    jquery = jquery_js.read()
    browser.execute_script(jquery)  #active the jquery lib

#now you can write some jquery code then execute_script them
js = """
    var str = "div#myPager table a:[href=\\"javascript:__doPostBack('myPager','%s')\\"]"
    console.log(str)
    var $next_anchor = $(str);
    if ($next_anchor.length) {
        return $next_anchor.get(0).click(); //do click and redirect
    } else {
        return false;
    }""" % str(25) 

success = browser.execute_script(js)
if success == False:
    break

PS: Wenn ich Selenium verwende, um Inhalte von einer Website abzurufen, werde ich immer gesperrt. Jetzt sollten Sie einen Proxy verwenden, um es zu übergehen.
Hier ist etwas Code:

PROXY_HOST = "127.0.0.1"
PROXY_PORT = 8087
SOCKS_PORT = 8088

fp = webdriver.FirefoxProfile()

# Direct = 0, Manual = 1, PAC = 2, AUTODETECT = 4, SYSTEM = 5
fp.set_preference("network.proxy.type", 1)

fp.set_preference("network.proxy.http", PROXY_HOST)
fp.set_preference("network.proxy.http_port", PROXY_PORT)
fp.set_preference("network.proxy.socks", PROXY_HOST)
fp.set_preference("network.proxy.socks_port", SOCKS_PORT)
fp.set_preference("network.proxy.ftp", PROXY_HOST)
fp.set_preference("network.proxy.ftp_port", PROXY_PORT)
fp.set_preference("network.proxy.ssl", PROXY_HOST)
fp.set_preference("network.proxy.ssl_port", PROXY_PORT)

fp.set_preference("network.proxy.no_proxies_on", "") # set this value as desired

browser= webdriver.Firefox(firefox_profile=fp) # with proxy
browser = webdriver.Firefox() # no proxy
browser.get("http://search.example.com") # Load page

elem = browser.find_element_by_id("query_box") # Find the query input
elem.send_keys(u'my query string') # send query string to the input
elem.submit() # submit the query form

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X