我敢肯定我在這裏做錯了依賴管理,但不能完全弄清楚。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