3
votes

Below is my code. When I run this, it shows a WebDriverException. How do I execute JavaScript code in Robot Framework?

This, return $(arguments[0]).data('${ToolTip}').options.title code is doing well in -java Selenium web driver.

Mouse Over    ${CreateTask}
    Execute JavaScript    return $(arguments[0]).data('${ToolTip}').options.title
3

3 Answers

5
votes

From http://rtomac.github.io/robotframework-selenium2library/doc/Selenium2Library.html#Execute%20Javascript:

Note that, by default, the code will be executed in the context of the Selenium object itself, so this will refer to the Selenium object. Use window to refer to the window of your application, e.g. window.document.getElementById('foo').

So

Mouse Over    ${CreateTask}
    Execute JavaScript    return window.$(arguments[0]).data('${ToolTip}').options.title

Assuming there is some library (jQuery most probably) that actually understands the $ shorthand.

2
votes

arguments[0] normally refers to arguments passed to your script.

Selenium2Library's Execute JavaScript calls webdriver.execute_javascript and does not pass any arguments to it. arguments[0] is therefore undefined.

See Is there a way to provide arguments to "Execute JavaScript" in Robot Framework? for a workaround.

1
votes

Use any one method from below options

   Execute Javascript    document.getElementById('authUser').value='admin'
 
   ${ele}    Get WebElement    id=clearPass
   Execute Javascript    arguments[0].value='pass';     ARGUMENTS    ${ele}
    
   Execute Javascript    alert(arguments[0]);    ARGUMENTS    123 
   
   Execute Javascript    document.evaluate("//*[text()='Patients']",document.body,null,9,null).singleNodeValue.click();
    
   
   Execute Javascript    document.querySelector('[data-bind="click: changePassword"]').click();
   
   
   ${ele}    Get WebElement    //*[text()='Logout']
   Execute Javascript    arguments[0].click();     ARGUMENTS    ${ele}