texto - Ejecutar la función jQuery usando el paquete RSelenium
change text jquery (2)
Estoy intentando automatizar un proceso de inicio de sesión en un sitio web y realizar algún proceso en él, utilizando el paquete RSelenium
. He podido iniciar sesión, hacer clic en los botones aquí y allá, pero estoy atascado al ejecutar una función jQuery
en la página. Hay un cuadro desplegable que llena los datos usando una función jQuery
. No estoy seguro de cómo ejecutar esta función. La fuente de la página (incluida la función jQuery
) es la siguiente:
<input disabled="disabled" id="stuff" name="stuff" style="width:100%" type="text" /><script>
jQuery(function(){jQuery("#stuff").kendoDropDownList({"change":disableNext,"dataSource":{"transport":{"read":{"url":"/StuffInfo/GetStuff","data":filterStuff},"prefix":""},"serverFiltering":true,"filter":[],"schema":{"errors":"Errors"}},"autoBind":false,"optionLabel":"Select court...","cascadeFrom":"state"});});
</script>
<script>
El nombre del menú desplegable es stuff
y estoy usando el siguiente código para acceder a él:
library("RSelenium")
startServer()
mybrowser <- remoteDriver()
mybrowser$open()
mybrowser$navigate("<URL>")
wxChooseStuff <- mybrowser$findElement(using=''id'',"stuff")
Cuando intento ejecutar el siguiente comando:
wxChooseStuff$clickElement()
Obtuve el siguiente error:
Error: Summary: ElementNotVisible
Detail: An element command could not be completed because the element is not visible on the page.
class: org.openqa.selenium.ElementNotVisibleException
Esperaba que el clic llenara automáticamente los datos en el menú desplegable.
Cualquier indicador sobre cómo ejecutar la función jQuery usando RSelenium
sería muy apreciado.
Incluso si puedo ejecutar la función jQuery
usando otro paquete, eso estará bien. Me gustaría ejecutar esta función y hacer clic en el elemento.
PD: no soy un desarrollador web, así que discúlpeme si hago una pregunta estúpida.
EDITAR:
Probé el siguiente código según sugerencia:
En este comando, solo incluyo el texto completo incluido en la etiqueta del script
, reemplazando todas las comillas dobles ( "
) por comillas simples ( ''
)
mybrowser$executeScript(script = "jQuery(function(){jQuery(''#stuff'').kendoDropDownList({''change'':disableNext,''dataSource'':{''transport'':{''read'':{''url'':''/StuffInfo/GetStuff'',''data'':filterStuff},''prefix'':''''},''serverFiltering'':true,''filter'':[],''schema'':{''errors'':''Errors''}},''autoBind'':false,''optionLabel'':''Select court...'',''cascadeFrom'':''state''});});")
wxChooseStuff <- mybrowser$findElement(using=''id'',"stuff")
mybrowser$executeScript(script = "arguments[0].hidden = false;",
args = list(wxChooseStuff))
wxChooseStuff$clickElement()
pero recibí el siguiente error:
Error: Summary: ElementNotVisible
Detail: An element command could not be completed because the element is not visible on the page.
class: org.openqa.selenium.ElementNotVisibleException
Parece que el elemento todavía no se encuentra.
No tengo idea de qué controlador está utilizando, pero con el controlador Chrome para PHP, puede hacer esto:
$javascript = array(''script'' => ''myfunction();'', ''args'' => array());
$var = $this->execute($javascript);
Si está utilizando el navegador Chrome, haga clic con el botón derecho en el elemento que desea "hacer clic" en RSelenium y seleccione Inspect
. Una vez en la consola del desarrollador, haga clic con el botón derecho nuevamente en el elemento resaltado y elija Copy/Copy Xpath
. Finalmente, en su código R use findElement(using="xpath", "xpath string you''ve copied")
. En mi experiencia, RSelenium tiene problemas notorios para encontrar cosas en la página utilizando ID, mientras que XPath es (de nuevo, para mí) mucho más robusto.