2015-09-03 14 views
20

Próbuję zautomatyzować proces logowania do witryny i wykonywania na niej jakiegoś procesu, używając pakietu RSelenium. Byłem w stanie się zalogować, klikać przyciski tu i tam, ale utknąłem przy wykonywaniu funkcji jQuery na stronie. Jest tam rozwijane pudełko, które wypełnia dane za pomocą funkcji jQuery. Nie wiem, jak uruchomić tę funkcję. Źródłem strona (w tym funkcję jQuery) przedstawia się następująco:Wykonywanie funkcji jQuery przy użyciu pakietu 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> 

Nazwa rozwijanej jest stuff i używam następujący kod do niego dostęp:

library("RSelenium") 

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

gdy próbuję wykonać następujące polecenie:

wxChooseStuff$clickElement() 

pojawia się następujący błąd:

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 

Miałem nadzieję, że kliknięcie spowoduje automatyczne wypełnienie danych w menu rozwijanym.

Wszelkie wskazówki dotyczące wykonywania funkcji jQuery przy użyciu RSelenium będą mile widziane.

Nawet jeśli mogę wykonać funkcję jQuery przy użyciu innego pakietu, będzie dobrze. Chciałbym po prostu wykonać tę funkcję i kliknąć element.

PS - Nie jestem programistą stron internetowych, więc przebacz mi, jeśli zadaję głupie pytanie.

EDIT:

Próbowałem poniższy kod, jak na propozycję:

W tym poleceniu, po prostu zawierać pełny tekst zawarty w znaczniku script, zastępując wszystkie cudzysłów (") z apostrofami (')

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

ale otrzymały następczych błąd:

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 

Wygląda na to, że elementu wciąż nie można znaleźć.

+0

Czy to możliwe, aby dać stronie internetowej jesteś zainteresowany więc to trochę łatwiej rozmnażać się? – Dason

+0

Tak naprawdę robię to na wewnętrznej stronie testowej, więc opublikowanie linku nie będzie możliwe, przepraszam :( – Patthebug

+0

Może to być pogoń za głupkiem, ale czy jest możliwe, że są dwa identyczne identyfikatory? wywoływało u mnie bóle głowy z Selenem, kiedy próbowało działać na id, który był pod divem i "niewidoczny", podczas gdy próbowałem nakłonić go do kliknięcia innego elementu, który miał ten sam identyfikator. – Joy

Odpowiedz

0

nie mam pojęcia, co kierowca, którego używasz, ale z kierowcą Chrome dla PHP to zrobić:

$javascript = array('script' => 'myfunction();', 'args' => array()); 
$var = $this->execute($javascript); 
Powiązane problemy