2010-05-04 5 views
12

tengo una página (index.html) que tiene un marco:¿Cómo se usa Selenium para ejecutar javascript dentro de un marco?

<html> 
<body> 
<iframe src="otherPage.html" /> 
</body> 
</html> 

Y el OtherPage.html tiene el contenido:

<html> 
<head><link src="jquery-min.js" type="text/javascript" /></head> 
<body><div id="main">Contents</div></body> 
</html> 

Estoy intentando utilizar el siguiente código de selenio en el índice .html:

selenium.open("index.html"); 
selenium.selectFrame("//iframe"); 
selenium.getEval("window.jQuery('div[id=main]')"); 

Sin embargo, esto falla miserablemente. Dice que el objeto jQuery no existe.

Si intento ejecutar la prueba de selenio en la OtraPagina así:

selenium.open("otherPage.html"); 
selenium.getEval("window.jQuery('div[id=main]')"); 

todo es miel sobre hojuelas.

Ahora mismo es un pseudo código, si la gente quiere que lo haga compilar lo haré y lo pondré en github.

Respuesta

12

Selenium almacena el objeto de ventana dentro de su propio objeto para que pueda manipularlo mejor. Una vez que te muevas al marco, debería ser así.

selenium.getEval("var window = this.browserbot.getUserWindow();window.jQuery('div[id=main]')"); 

Y eso debería funcionar para usted

que tiene un tutorial en mi sitio para este tipo de situación here

+0

alguna idea de cómo hacerlo del selenio IDE? window returns [object XPCNativeWrapper [object Window]] que no tiene jQuery (mucho tiempo después de que se carga la página). – IAdapter

+0

Puntuación alta en google cuando estaba buscando hacer esto en el IDE. El comando es assertEval El objetivo es el script (asegúrese de que si usa jQuery para referenciarlo desde la ventana, entonces es su ventana. $ ("...) El valor es el valor que devuelve. – HMR

11

que puede utilizar:

JavascriptExecutor js = (JavascriptExecutor) driver; 
js.executeScript("javascript:sendEvent('play');"); 
+1

Esta es la manera de hacerlo con Selenium 2 webdriver – Zugwalt

+1

El tipo de selenio no se menciona en la pregunta. – Innovation

Cuestiones relacionadas