org.openqa.selenium.JavascriptException: SyntaxError: '' string literal 在通过 Selenium 使用 executeScript 时包含未转义的换行符
executeScript()
以单行 String 为例:
String myText = "80120804076";
但是当我尝试发送多行 String 时,引发了 JavascriptException
。
代码试验:
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")))); } }
观察到的错误:
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)
我经历过相关的讨论:
- Java:
- JavaScript:
引用:SyntaxError: unterminated string literal
仍然不知道我哪里出错了。谁能帮帮我?
最佳答案
这是对我有用的:
1) 在每个 \n
之前添加一个额外的斜杠,使其成为 \\n
2) 在撇号 hasn\'t
之前添加额外的斜线使其 hasn\\'
"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.";
关于javascript - 组织.openqa.selenium.JavascriptException : SyntaxError: '' string literal contains an unescaped line break while using executeScript through Selenium,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53669371/