我敢肯定我在这里做错了依赖管理,但不能完全弄清楚。Maven项目崩溃,没有堆栈跟踪或日志消息与硒依赖
我的Maven项目“A”依赖于项目“B”(一个Gradle托管项目)。 “A”和“B”都对Selenium的UI自动化有依赖性。 “B”是一些硒处理库的集合。硒的webdriver对象是在项目乙初始化并返回到A,是这样的:
一些类项目甲:
public WebDriver myDriver;
myDriver = B.initializeWebDriver(myDriver, various selenium related parameters...);
然后“A”可以利用在TestNG的测试初始化myDriver对象。 它在“B”崩溃不具有堆栈跟踪的地方是:B工程
initializeWebDriver方法:
public WebDriver initializeWebDriver(WebDriver webDriver, ...) {
webDriver = new RemoteWebDriver(new URL(url), cap); // <-- crashes here
return webDriver
}
我本来认为“A”和“B”将只需要对“selenium-java”有依赖性。这就是所有“B”都具有硒依赖性,并且可以创建驱动程序,并将其用于完全包含在项目B中的各种单元测试。如果项目A依赖于selenium-java,并且我从A运行测试,那么Java当它到达实例化remoteWebDriver的“B”中的代码行时立即结束testNG测试。我在A和B都有try-catch
,并且什么都没有发生。没有堆栈跟踪。没有日志消息。只是立即死于A中的测试方法,而不是跳到'catch',而是跳到'finally'并结束。
是什么让我非常确定它是一个依赖管理问题,如果我将“A”的依赖关系更改为selenium-api和selenium-chrome-driver和selenium-remote-driver,它工作正常。但是我们不需要这么做 - selenium-java应该没问题,而且selenium-java包含其他对象(selenium-api等)!我猜这是一个奇怪的CLASSDEF问题,我没有正确执行依赖关系管理。我从来没有见过java公然放弃没有堆栈跟踪或像这样的错误,除非它是一些非常奇怪的classdef事情。
任何想法?
**
[编辑:根据要求提供额外的代码]
从B:
public WebDriver getWebDriver(WebDriver webDriver,...) {
try {
System.out.println("inside B try");
webDriver = new RemoteWebDriver(new URL(hubUrl), cap);
System.out.println("B instantiated webdriver");
} catch (Exception e) {
System.out.println("Caught in B");
e.printStackTrace();
}
return webDriver;
}
从类中所述的:
try {
System.out.println("inside A try");
webDriver = B.getWebDriver(webDriver);
System.out.println("webdriver A successful");
} catch (Exception e) {
System.out.println("caught in A");
e.printStackTrace();
} finally {
closeBrowser(webDriver);
}
从这个输出:
inside A try
inside B try
then output from the closeBrowser routine from the 'finally' in A.
没有任何异常或任何被捕获的证据。只要它在B中创建远程Web驱动程序,它就会以某种方式死在没有输出的情况下,然后进入A中的'finally'。
编辑:修复了问题, B'确保它包括硒的依赖性。坛子里有人出口项目B:
from sourceSets.main.output
from sourceSets.main.allJava
...在Maven项目A,我定义硒的Java的依赖(删除了所有其他各种硒罐硒等-API等,因为这现在工作)作为范围:提供。。所以它确保selenium-java依赖实际上是真正从项目'B'获得的。
但我不明白为什么我不能让A和B都依赖于硒-java。他们指定了完全相同的版本,我查看了依赖关系解决方案,他们都使用相同的版本,而不是使用不同的版本,这是由于某种类型的冲突。
[编辑]
项目A的POM文件中列出的依赖的顺序是什么使得它的工作,而不是变化的gradle或“提供”的变化。在项目B之前简单地列出selenium-java。
你试试抓住'Throwable'吗?你能用try-catch-finally来显示代码吗? – alexbt
我没有试图抛出,但有证据表明它不会被捕获。这是代码/输出: – borisivan
其中是代码/输出? – alexbt