Java Selenium Wire日志为空
我们最近将我们的项目改为更模块化 我们将selenium与jbrowserdriver结合使用,从页面中提取数据 我们正在使用Tomcat的Spring Boot 以前,我们有一个war文件,我们将其部署到tomcat,并打包了所有类文件。在会话期间,我们使用带有wire日志的jbrowserdriver来捕获头文件,效果很好 然而,我们现在已经分离出了一些功能,看起来我们在tomcat中遇到了一系列不同的类加载器问题 我们的系统布局如下:Java Selenium Wire日志为空,java,selenium,tomcat,logging,classloader,Java,Selenium,Tomcat,Logging,Classloader,我们最近将我们的项目改为更模块化 我们将selenium与jbrowserdriver结合使用,从页面中提取数据 我们正在使用Tomcat的Spring Boot 以前,我们有一个war文件,我们将其部署到tomcat,并打包了所有类文件。在会话期间,我们使用带有wire日志的jbrowserdriver来捕获头文件,效果很好 然而,我们现在已经分离出了一些功能,看起来我们在tomcat中遇到了一系列不同的类加载器问题 我们的系统布局如下: /companyDir + -- /libs | +
/companyDir
+ -- /libs
| + -- core.jar
| + -- /widgets
| | + -- widgetA.jar
| | + -- widgetB.jar
Tomcat配置为在其shared.loader属性中包含/libs/*.jar和/libs/widgets/*.jar。这些jar文件包含在tomcat开始时
然后,我们部署一个文件project.war,该文件具有Spring依赖项和控制器端点
但是,现在当我们调用端点并且端点执行widgetA.jar时,wire日志完全为空。我们可以在catalina.out中看到wire日志,但是调用driver.manage().logs().get(“wire”)
显示为空。我不确定如何准确地配置它,以便我们的webdriver中的内部日志充满我们显然要返回的wire日志
我可能对类加载器的问题不太清楚,因为这似乎就是问题所在。因此,通过使用上下文资源,我们能够重新捕获日志 在正在部署的project.war的/src/main/webapp/META-INF/context.xml中,我们可以指定一个“JarResources”资源,并使jar可用于相同的类加载器。塔达,问题解决了 下面是context.xml的布局:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/ourApp" docBase="/ourApp">
<Resources>
<PreResources className="org.apache.catalina.webresources.DirResourceSet"
base="/path/to/our/configFiles/"
webAppMount="/WEB-INF/classes" />
<JarResources className="org.apache.catalina.webresources.DirResourceSet"
base="/path/to/our/jars/libs"
webAppMount="/WEB-INF/lib" />
<JarResources className="org.apache.catalina.webresources.DirResourceSet"
base="/path/to/our/jars/libs/widgets"
webAppMount="/WEB-INF/lib" />
</Resources>
</Context>
如此深入的挖掘表明,org.apache.http仍在生成wire日志,但当LogsServer.java
执行updateSettings()
以重定向/重新路由org.apache.commons.logging.Log
到com.machinepublishers.jbrowserdriver.WireLog
,当所有的类都从同一个类加载器执行时,这就不起作用了。由于jbrowserdriver使用RMI执行,我甚至在理解它是如何正常工作的方面有点困难,尽管这似乎仍然是与类加载器相关的问题。其他信息:我修改了结构,因此没有使用tomcat的shared.loader属性,我现在使用应用程序上下文来指定要包括映射到/WEB-INF/lib的JAR。同样的结果。我认为这排除了类加载器的问题,并指出它只从外部jar运行。