2015-09-03 4 views
20

Я пытаюсь автоматизировать процесс входа в систему на веб-сайте и выполнения некоторого процесса на нем с использованием пакета RSelenium. Я смог войти в систему, нажимать кнопки здесь и там, но я застрял при выполнении функции jQuery на странице. Существует раскрывающийся список, который заполняет данные в нем с помощью функции jQuery. Я не уверен, как выполнить эту функцию. Исходный код страницы (в том числе функции jQuery) выглядят следующим образом:Выполнение функции jQuery с использованием пакета RSelenium

<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> 

имя выпадающего списка является stuff, и я использую следующий код для доступа к нему:

library("RSelenium") 

startServer() 
mybrowser <- remoteDriver() 
mybrowser$open() 
mybrowser$navigate("<URL>") 
wxChooseStuff <- mybrowser$findElement(using='id',"stuff") 

когда я пытаюсь выполните следующую команду:

wxChooseStuff$clickElement() 

Я получаю следующее сообщение об ошибке:

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 

Я надеялся, что щелчок будет автоматически заполнять данные в выпадающем меню.

Любые указатели на то, как выполнить функцию jQuery с использованием RSelenium, будут очень признательны.

Даже если я могу выполнить функцию jQuery, используя другой пакет, это будет нормально. Я хотел бы просто выполнить эту функцию и нажать на элемент.

PS - Я не веб-разработчик, поэтому простите меня, если я задам глупый вопрос.

EDIT:

Я попытался следующий код, согласно предложению:

В этой команде я просто включить полный текст, заключенный в script тега, заменив все двойные кавычки (") одинарные кавычки (')

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() 

, но я получил последующие ошибка:

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 

Похоже, что элемент по-прежнему не найден.

+0

Можно ли дать веб-сайт вы заинтересованы в так что это немного легче воспроизводить? – Dason

+0

Я на самом деле делаю это на внутреннем тестовом веб-сайте, поэтому публикация ссылки будет невозможна, извините :( – Patthebug

+0

Это может быть дикая охота на гуси, но возможно ли, что есть два идентификатора, которые идентичны? вызвал у меня головные боли с Selenium до этого, когда он продолжал пытаться действовать на id, который находился под div и «не был видимым», в то время как я пытался заставить его щелкнуть по другому элементу с одним и тем же идентификатором. – Joy

ответ

0

Я понятия не имею, что водитель, который вы используете, но с драйвером хромированной для PHP вы это делаете:

$javascript = array('script' => 'myfunction();', 'args' => array()); 
$var = $this->execute($javascript); 
Смежные вопросы