4

How can we execute an external .js file using selenium webdriver file using java selenium. I got some reference "Call external javascript functions from java code", however invoke function is able to accept the function inside that file. I want to just execute the whole file as a whole.

Community
  • 1
  • 1
imdevjyoti
  • 61
  • 1
  • 5

2 Answers2

3

It's as simple as this to run an external JavaScript from your server upon the client:

// Assume Guava, but whatever you use to load files...
String externalJS = Files.toString( new File("external.js"), Charset.forName("utf-8"));

// Execute, assume no arguments, and no value to return
Object ignore = ((JavascriptExecutor) driver).executeScript(externalJS);

The link you provided isn't useful, because it's about executing JavaScript upon the server (within the Java VM) rather than upon the browser/device client.

If rather than executing, you're interested in injecting JavaScript into the page for other scripts etc. to interact with (i.e. rather than a one-off execution), see this question.

Community
  • 1
  • 1
Andrew Regan
  • 5,087
  • 6
  • 37
  • 73
2

Here is the code for nodeJS calling external JS and executing a function within the JS:

var fs = require('fs');
var webdriver = require('selenium-webdriver'),
By = webdriver.By,
until = webdriver.until;

 var driver = new webdriver.Builder()
.forBrowser('phantomjs')
.build();

var axeSource = fs.readFileSync('lib/axe.js', 'utf8');

driver
    .get('http://www.google.com/ncr')       
driver.executeScript(axeSource)
    .then(function(){
        driver.switchTo().defaultContent();
         driver.executeAsyncScript(function() {
           var callback = arguments[arguments.length - 1];
            window.axe.a11yCheck(document, null, function (results) {
                callback(results);
            });

         }).then(function(str) {
                var viola = processResults(str);
                console.log(viola);
            });
    })


driver.quit();
Prem Nawaz
  • 21
  • 1