gpt4 book ai didi

javascript - Selenium EventFiringWebDriver JavaScript : SyntaxError: missing ) after argument list

转载 作者:行者123 更新时间:2023-11-28 14:28:25 31 4
gpt4 key购买 nike

尝试使用内置的 Selenium EventFiringWebDriver 类执行 javaScript 命令。

EventFiringWebDriver eventFiringWebDriver = new EventFiringWebDriver(driver);
eventFiringWebDriver.executeScript("document.querySelector('[ng-reflect-title='Assessment']>div.cc-tile>div.cc-tile-body').scrollTop=370");

但这会产生错误:Runtime.evaluate 抛出异常:SyntaxError:参数列表后缺少 )

如果我使用 Chrome 为该对象提供的长 ccs 选择器:

body > bb-root > best-app > div > div.cc-content > bb-best > bb-assess > best-tile > div > div

代替:

[ng-reflect-title='Assessment']>div.cc-tile>div.cc-tile-body

然后就可以完美运行了。

当通过 Chrome 开发工具运行时,上述两个 ccs 选择器都会在页面上生成一个对象。我更喜欢使用更动态的选择器。

最佳答案

这是您尝试运行的 JavaScript。借助Stack Overflow的代码高亮,你能看出问题所在吗?

document.querySelector('[ng-reflect-title='Assessment']>div.cc-tile>div.cc-tile-body').scrollTop=370

注意单词评估的颜色。

您尝试将一个字符串文字放入另一个字符串文字中,但没有转义引号,因此 JavaScript 编译器认为该字符串文字在 Assessment 之前结束。您需要对一对引号使用双引号而不是单引号,或者转义内部引号。

让事情变得更加复杂的是,这个包含嵌套字符串文字的 JavaScript 片段本身就是 Java 字符串文字。

也许最简单的方法是在 JavaScript 字符串中使用转义双引号作为一组引号。我在这里选择了外部套装:

eventFiringWebDriver.executeScript("document.querySelector(\"[ng-reflect-title='Assessment']>div.cc-tile>div.cc-tile-body\").scrollTop=370");

另一种方法是转义 JavaScript 片段中的内部引号,以便运行以下 JavaScript:

document.querySelector('[ng-reflect-title=\'Assessment\']>div.cc-tile>div.cc-tile-body').scrollTop=370

然而,这种方法会变得困惑,因为您必须转义 Java 字符串中的反斜杠,以便将它们传递到 JavaScript 以转义单引号。两级字符转义可能会造成阅读困惑,因此最好避免这种情况。

关于javascript - Selenium EventFiringWebDriver JavaScript : SyntaxError: missing ) after argument list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52431550/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com