Reputation: 193308
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 ?
Upvotes: 1
Views: 6903
Reputation: 799
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.";
Upvotes: 3
Reputation: 2836
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");
Upvotes: 0