当使用Selenium控制ChromeDriver或GeckoDriver时,我收到一个JavaScript TypeError“x”不是一个函数

iq3niunx  于 2023-10-19  发布在  Java
关注(0)|答案(1)|浏览(178)

当使用Selenium(通过Java)控制ChromeDriver或GeckoDriver时,我收到各种JavaScript TypeError消息,如“.defaults is not a function”,“.isArray is not a function”,“_.some is not a function”。看起来这些错误是针对Lodash.js函数的。
只有在使用Selenium时才会引发错误消息。我在使用原生Chrome或FireFox浏览器时没有收到这些错误消息,应用程序在这些浏览器上运行正常。
由于这些错误,当运行Selenium时,测试执行停止。
我使用的是Selenium 4.12.1版本以及最新版本的ChromeDriver和GeckoDriver。
我能够正常运行应用程序与本机浏览器和开发工具不显示任何错误消息。
是否有任何Selenium设置可以用来抑制TypeError检查?

c86crjj0

c86crjj01#

当您将Selenium与ChromeDriver或GeckoDriver结合使用时,遇到的JavaScript TypeError消息通常表明Selenium版本、WebDriver(ChromeDriver或GeckoDriver)和您正在测试的Web应用程序之间存在兼容性问题。Selenium使用的JavaScript库(如Lodash)可能与Web应用程序不同,这可能导致这些错误。
以下是您可以采取的一些步骤,以排除故障并可能解决此问题:
1.更新依赖项:确保您使用的是最新版本的Selenium、ChromeDriver和GeckoDriver。有时,更新这些组件可以解决兼容性问题。
1.检查浏览器和驱动程序版本:确保您测试的Web浏览器版本(Chrome或Firefox)与WebDriver版本(ChromeDriver或GeckoDriver)匹配。不匹配的版本可能会导致兼容性问题。
1.检查应用程序的JavaScript库:查看应用程序的代码和依赖项,包括它使用的Lodash或其他JavaScript库的版本。在您的应用程序和Selenium WebDriver中使用的版本之间可能存在冲突。

  1. WebDriver选项:初始化WebDriver时,您可以设置某些选项和功能。根据您遇到的错误,您可能需要配置特定的选项来处理JavaScript库。例如,您可以像这样设置ChromeDriver的选项:
    java代码:
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
WebDriver driver = new ChromeDriver(options);

如果需要,可以为GeckoDriver(Firefox)设置类似的选项。
无头模式:有时,在无头模式下运行WebDriver可能会导致执行JavaScript时出现问题。尝试在禁用headless选项的情况下运行测试,以查看错误是否仍然存在。
自定义JavaScript错误处理:您可以在Selenium代码中实现自定义JavaScript错误处理,以捕获和记录错误,而不会导致测试失败。这可以使用Selenium中的JavaScriptExecutor来完成。下面是一个示例:
java代码:

// Initialize the WebDriver
WebDriver driver = new ChromeDriver();

// Execute JavaScript to handle JavaScript errors
((JavascriptExecutor) driver).executeScript("window.onerror = function(message, source, lineno, colno, error) { console.log('JavaScript Error: ' + message); return true; };");

// Continue with your test
// ...

日志记录和调试:使用Selenium的日志功能捕获浏览器控制台日志。这可以帮助您确定错误的来源。例如,在Java中,你可以这样配置日志:
java代码:

System.setProperty("webdriver.chrome.logfile", "chrome.log");
System.setProperty("webdriver.chrome.verboseLogging", "true");
WebDriver driver = new ChromeDriver();

检查您的应用代码:检查您的Web应用程序代码是否存在任何潜在问题。确保它不依赖于Selenium环境中可能不支持的特定JavaScript特性。
如果您已经尝试了这些步骤,但问题仍然存在,您可以考虑创建一个简化的测试用例来重现错误,并在相关论坛上寻求帮助,或者联系Selenium社区寻求帮助。也有可能问题是特定于您正在测试的Web应用程序的,并且可能需要在应用程序端进行修改以与Selenium兼容。

相关问题