1

org.openqa.selenium.JavascriptException: SyntaxError: '' string literal contains an unescaped line break while using executeScript through Selenium

executeScript() is working perfect with single line String as an example:

String myText = "80120804076";

But when I am trying to send a multiline String JavascriptException is raised.

  • Code trials:

    import org.openqa.selenium.By;
    import org.openqa.selenium.JavascriptExecutor;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    public class send_large_text {
    
        static WebDriver driver;
        public static void main(String[] args) {
            System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
            driver = new FirefoxDriver();
            driver.get("https://translate.shell.com/");
            //String myText = "80120804076";
            String myText = "No, there is no way to hide the console window of the chromedriver.exe \n"
                + "in the .NET bindings without modifying the bindings source code. This is seen \n"
                + "as a feature of the bindings, as it makes it very easy to see when your code \n"
                + "hasn\'t correctly cleaned up the resources of the ChromeDriver, since the console window \n"
                + "remains open. In the case of some other languages, if your code does not properly clean up \n"
                + "the instance of ChromeDriver by calling the quit() method on the WebDriver object, \n"
                + "you can end up with a zombie chromedriver.exe process running on your machine.";
            (   (JavascriptExecutor) driver).executeScript("arguments[0].value=\'" + myText + "\';", new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("textarea.form-control#translateText"))));
        }
    }
    
  • Error Observed:

    1544184402064   mozrunner::runner   INFO    Running command: "C:\\Program Files\\Mozilla Firefox\\firefox.exe" "-marionette" "-foreground" "-no-remote" "-profile" "C:\\Users\\ATECHM~1\\AppData\\Local\\Temp\\rust_mozprofile.b4OAHY7RViE6"
    1544184406841   Marionette  INFO    Listening on port 11919
    1544184406988   Marionette  WARN    TLS certificate errors will be ignored for this session
    Dec 07, 2018 5:36:47 PM org.openqa.selenium.remote.ProtocolHandshake createSession
    INFO: Detected dialect: W3C
    Exception in thread "main" org.openqa.selenium.JavascriptException: SyntaxError: '' string literal contains an unescaped line break
    Build info: version: '3.14.0', revision: 'aacccce0', time: '2018-08-02T20:13:22.693Z'
    System info: host: 'ATECHM-03', ip: '192.168.1.6', os.name: 'Windows 8', os.arch: 'amd64', os.version: '6.2', java.version: '1.8.0_172'
    Driver info: org.openqa.selenium.firefox.FirefoxDriver
    Capabilities {acceptInsecureCerts: true, browserName: firefox, browserVersion: 63.0.3, javascriptEnabled: true, moz:accessibilityChecks: false, moz:geckodriverVersion: 0.23.0, moz:headless: false, moz:processID: 5620, moz:profile: C:\Users\AtechM_03\AppData\..., moz:useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, platformVersion: 6.2, rotatable: false, setWindowRect: true, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}
    Session ID: 31ac155f-8f03-4adf-bc7b-a778f1235351
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
        at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
        at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
        at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
        at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:548)
        at org.openqa.selenium.remote.RemoteWebDriver.executeScript(RemoteWebDriver.java:485)
        at demo.send_large_text.main(send_large_text.java:25)
    

I have been through the related discussions:

Reference: SyntaxError: unterminated string literal

Still no clue where I am going wrong. Can anyone help me out ?

undetected Selenium
  • 183,867
  • 41
  • 278
  • 352

2 Answers2

3

Here is what worked for me:

1) added an extra slash before every \n to make it \\n

2) added extra slash before apostrphne hasn\'t to make it hasn\\'t

"No, there is no way to hide the console window of the chromedriver.exe \\n"
                + "in the .NET bindings without modifying the bindings source code. This is seen \\n"
                + "as a feature of the bindings, as it makes it very easy to see when your code \\n"
                + "hasn\\'t correctly cleaned up the resources of the ChromeDriver, since the console window \\n"
                + "remains open. In the case of some other languages, if your code does not properly clean up \\n"
                + "the instance of ChromeDriver by calling the quit() method on the WebDriver object, \\n"
                + "you can end up with a zombie chromedriver.exe process running on your machine.";
Vladimir Efimov
  • 797
  • 5
  • 13
0

Have you tried this method:

String myText = {"No, there is no way to hide the console window of the chromedriver.exe",
                 "in the .NET bindings without modifying the bindings source code. This is seen",
                 "as a feature of the bindings, as it makes it very easy to see when your code",
                 "hasn\'t correctly cleaned up the resources of the ChromeDriver, since the console window",
                 "remains open. In the case of some other languages, if your code does not properly clean up",
                 "the instance of ChromeDriver by calling the quit() method on the WebDriver object,",
                 "you can end up with a zombie chromedriver.exe process running on your machine."}.join("\n");
Bill Hileman
  • 2,798
  • 2
  • 17
  • 24