2010-07-13 9 views
12

Me gustaría usar Selenium para hacer clic en la pestaña de un sitio web donde la pestaña se creó dinámicamente con JQuery. Hay un problema, ya que se creó dinámicamente y la pestaña no tiene identificador vinculado (solo se proporciona ID de clase), por lo que me estoy quedando sin pista para hacer clic en él con Selenium.¿Cómo usar JQuery en selenio?

Después de buscar en Google durante 2 semanas, descubrí que se podía hacer mediante JQuery inyectando JQuery en Selenium y reempaquetándolo para que sea compatible con JQuery API. ¿Pero el problema ahora es que no sé cómo desencadenar el script de JQuery en Selenium?

¿Hay algún recurso o alguna guía sobre la configuración de JQuery en Selenium? ¿Cómo voy a ejecutar JQuery en Selenium?

Respuesta

9

Puedes intentar usar mi lib de selenio en github.

Se ocupa casi todo el API de jQuery menos las funciones que utilizan/requieren pasar manejador:

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(); 
} 
+0

Eso es genial y ahorra mucho trabajo de integración. Gracias. –

+0

El método noConflict de jQuery se llama aquí: https://github.com/Nthalk/SeleniumJQuery/blob/master/src/com/anteambulo/SeleniumJQuery/jQueryFactory.java#L144 – Nthalk

4

ya que dijo que usted no tiene un ID, sino una clase:

(única clase Id proporcionado)

una mejor ... es probable que la respuesta use la estrategia del localizador de CSS que ya está cocida en Selenium donde puede seleccionar un elemento basado en una clase css o simplemente usando la lógica del selector CSS (al menos para css2 y css3)

Para seleccionar un elemento (div, span lo que sea) que tiene un clase específica puede simplemente usar esto para el localizador de Selenio:

css=.class-ID 

Usted puede incluso utilizar los selectores más complicados que son similares a los disponibles en jQuery, tales como:

css=#myDiv .class-ID 

Este buscará el elemento con un estilo css de class-ID dentro del elemento con un ID = myDiv.

2

Usted podría utilizar window.jQuery al mando getEval:

|getEval | window.jQuery('div#main button').click(); | | 

Funciona para mí en Selenio IDE.

Para FF3, utilice wrappedJSObject conseguir objeto 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! | 
3
  • En primer lugar se puede leer el jQuery desde unos jquery.js o archivo jquery.min.js.
  • Luego, use execute_script (jquery) para habilitar jquery dinámicamente.
  • Ahora puedes interactuar con jquery.

Aquí hay un código:

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: Cuando uso de selenio en busca de algún contenido de algún sitio, siempre me prohibición. Ahora deberías usar algún proxy para repasarlo.
Aquí hay un código:

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 
3

Mi equipo acaba de terminar una biblioteca que envuelve las funciones de jQuery para su uso con selenio. Acabamos de terminar nuestro primer lanzamiento, pero planeamos envolver TODAS las funciones de jquery. Esta biblioteca facilita el uso de jquery de tus pruebas de Selenium en C#. Hace MUCHAS pruebas de aspecto más limpio. Aquí está el código fuente: https://github.com/AcklenAvenue/JQSelenium

+3

menciona C#, ¿admite JAVA? – huahsin68

Cuestiones relacionadas