【问题标题】:org.openqa.selenium.JavascriptException: SyntaxError: '' string literal contains an unescaped line break while using executeScript through Seleniumorg.openqa.selenium.JavascriptException: SyntaxError: '' string literal contains an unscaped line break while using executeScript through Selenium
【发布时间】:2019-05-09 05:03:20
【问题描述】:

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

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)
    

我已经通过相关讨论:

参考:SyntaxError: unterminated string literal

仍然不知道我哪里出错了。谁能帮帮我?

【问题讨论】:

    标签: javascript java selenium selenium-webdriver webdriver


    【解决方案1】:

    这对我有用:

    1) 在每个 \n 之前添加一个额外的斜杠以使其成为 \\n

    2) 在撇号 hasn\'t 之前添加额外的斜线以使其成为 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.";
    

    【讨论】:

      【解决方案2】:

      你试过这个方法吗:

      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");
      

      【讨论】:

      • 谢谢。显示错误为The method join(String) is undefined for the type send_large_text - Syntax error on token ".", ; expected
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-12
      • 2018-11-30
      • 2017-04-07
      相关资源
      最近更新 更多