Comment utiliser JQuery dans le sélénium?
j'aimerais utiliser le sélénium pour cliquer sur l'onglet d'un web où l'onglet a été créé dynamiquement en utilisant JQuery. Il y a un problème, car il a été créé dynamiquement et l'onglet n'a aucun ID lié à elle (seulement class-ID fourni), donc je suis à court d'indice pour cliquer dessus en utilisant le sélénium.
après avoir cherché sur Google pendant 2 semaines, j'ai découvert que cela pouvait être fait en utilisant JQuery en injectant JQuery dans le sélénium et en le reconditionnant de manière à ce qu'il supporte L'API JQuery. Mais l' le problème maintenant est que je ne sais pas comment déclencher le script JQuery dans le sélénium?
Est t-il des ressources là-bas ou de directive sur la mise en place de JQuery en Sélénium? Comment vais-je exécuter JQuery dans le sélénium?
6 réponses
vous pouvez essayer d'utiliser ma lib de sélénium à github .
il gère la quasi - totalité de l'API jquery moins les fonctions qui utilisent / nécessitent le passage du gestionnaire:
HtmlUnitDriver drv = new HtmlUnitDriver(BrowserVersion.FIREFOX_3_6);
drv.setJavascriptEnabled(true);
try {
jQueryFactory jq = new jQueryFactory();
jq.setJs(drv);
drv.get("http://google.com");
jq.query("[name=q]").val("SeleniumJQuery").parents("form:first").submit();
String results = jq.queryUntil("#resultStats:contains(results)").text();
System.out.println(results.split(" ")[1] + " results found!");
} finally {
drv.close();
}
puisque vous avez dit que vous n'aviez pas de carte D'identité mais une classe:
(ID de classe seulement fourni)
...une meilleure réponse est susceptible d'utiliser la stratégie de localisation CSS qui est déjà fourré-dans au sélénium où vous pouvez sélectionner un élément basé sur une classe css ou simplement en utilisant la logique de sélection CSS (pour au moins css2 et css3)
donc pour sélectionner un élément (div, span whatever) qui a une classe spécifique vous peut simplement l'utiliser pour le Localisateur de sélénium:
css=.class-ID
vous pouvez même utiliser des sélecteurs plus compliqués qui sont similaires à ceux disponibles en JQuery tels que:
css=#myDiv .class-ID
recherche l'élément de style css de class-ID
dans L'élément avec un ID = myDiv
.
- tout d'abord, vous pouvez lire le jquery à partir d'un jquery.js ou jquery.min.fichier js.
- puis en utilisant execute_script (jquery) pour activer jQuery dynamiquement.
- maintenant vous pouvez interagir avec jquery.
voici un code:
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: quand J'utilise le sélénium pour récupérer du contenu d'un site web, ils m'interdisent toujours. Maintenant, vous devriez utiliser un mandataire pour aller sur elle.
voici un 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
mon équipe vient de finir une bibliothèque qui enveloppe les fonctions jquery pour une utilisation avec le sélénium. Nous venons de terminer notre première version, mais nous prévoyons d'emballer toutes les fonctions de jquery. Cette bibliothèque rend facile d'utiliser jquery à partir de vos tests de sélénium en C#. Ça rend les tests plus propres. Voici le code source: https://github.com/AcklenAvenue/JQSelenium
vous pouvez utiliser la fenêtre.jQuery dans getEval commande:
|getEval | window.jQuery('div#main button').click(); | |
ça marche pour moi sur L'IDE du sélénium.
pour FF3, utilisez wrappedJSObject pour obtenir l'objet jQuery:
|getEval | win = (this.page().getCurrentWindow().wrappedJSObject) ? this.page().getCurrentWindow().wrappedJSObject : this.page().getCurrentWindow() | |
|getEval | jq = win.jQuery | |
|assertEval | jq("div#main button").text() | click me! |
vous déclencheriez jquery de la même façon que vous déclencheriez un script java que vous injecter. Essayez ce how - to: http://seleniumhq.org/docs/05_selenium_rc.html#learning-the-api