Erando
Erando

Reputation: 899

Selenium 3: JavascriptExecutor returns ReferenceError

What I am trying to do: Using Selenium 3.0.1 I navigate to www.spiegel.de and try to read the JavaScript variable inlineCampaigns. It already worked with Selenium 2.53.1.

Code:

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class TestApp {

    private static WebDriver driver;

    private final static String geckoDriverPath = "C:\\Program Files\\geckodriver.exe";

    public static void main(String[] args) throws InterruptedException {

        System.setProperty("webdriver.gecko.driver", geckoDriverPath);
        driver = new FirefoxDriver();
        driver.get("http://www.spiegel.de/");
        String javaScriptCode = "return inlineCampaigns;";

        JavascriptExecutor js = null;
        if (driver instanceof JavascriptExecutor) {
            js = (JavascriptExecutor) driver;
        }
        Object result = null;
        try {
            result = js.executeScript(javaScriptCode);
        } catch (WebDriverException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
            driver.quit();
            return;
        }
        if (result instanceof WebElement) {
            WebElement resultWebElement = (WebElement) result;
            System.out.println(resultWebElement.getText());
            System.out.println(String.valueOf((WebElement) result));
        } else {
            System.out.println(result);         
        }

        driver.quit();
    }

}

Expected output: [ "kundenvideo", "sponsor_logo" ]

Actual output:

ReferenceError: inlineCampaigns is not defined
Build info: version: '3.0.1', revision: '1969d75', time: '2016-10-18 09:49:13 -0700'
System info: host: 'DESKTOP-G3JOA4U', ip: '192.168.212.50', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_112'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{rotatable=false, raisesAccessibilityExceptions=false, marionette=true, firefoxOptions={args=[], prefs={}}, appBuildId=20160623154057, version=, platform=XP, proxy={
}, command_id=1, specificationLevel=0, acceptSslCerts=false, browserVersion=47.0.1, platformVersion=10.0, XULappId={ec8030f7-c20a-464f-9b0e-13a3a9e97384}, browserName=Firefox, tak
esScreenshot=true, takesElementScreenshot=true, platformName=Windows_NT, device=desktop}]
Session ID: a5cc6052-dcee-43ea-9311-92000bc58ef6
org.openqa.selenium.JavascriptException: ReferenceError: inlineCampaigns is not defined
Build info: version: '3.0.1', revision: '1969d75', time: '2016-10-18 09:49:13 -0700'
System info: host: 'DESKTOP-G3JOA4U', ip: '192.168.212.50', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_112'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{rotatable=false, raisesAccessibilityExceptions=false, marionette=true, firefoxOptions={args=[], prefs={}}, appBuildId=20160623154057, version=, platform=XP, proxy={
}, command_id=1, specificationLevel=0, acceptSslCerts=false, browserVersion=47.0.1, platformVersion=10.0, XULappId={ec8030f7-c20a-464f-9b0e-13a3a9e97384}, browserName=Firefox, tak
esScreenshot=true, takesElementScreenshot=true, platformName=Windows_NT, device=desktop}]
Session ID: a5cc6052-dcee-43ea-9311-92000bc58ef6
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:127)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:93)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:42)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:163)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601)
    at org.openqa.selenium.remote.RemoteWebDriver.executeScript(RemoteWebDriver.java:537)
    at de.it2media.testprojekt.TestApp.main(TestApp.java:29)

Does anybody have any clue what might be the problem here? Thanks! Any help is appreciated.

Selenium 3.0.1 Firefox 47.0.1

Upvotes: 2

Views: 3117

Answers (1)

Florent B.
Florent B.

Reputation: 42528

The object inlineCampaigns is probably wrapped in window.wrappedJSObject:

Object result = ((JavascriptExecutor)driver).executeScript(
  "return window.inlineCampaigns || (window.wrappedJSObject && window.wrappedJSObject.inlineCampaigns);");

Upvotes: 4

Related Questions