1

Я уверен, что я делаю что-то неправильно здесь с управлением зависимостями, но не могу это понять.Ошибка проекта Maven без сообщений stacktrace или журнала с зависимостью Selenium

Мой проект Maven «A» зависит от проекта «B» (проект, управляемый градиентом). И «A», и «B» также зависят от автоматизации Selenium для автоматизации пользовательского интерфейса. «B» представляет собой набор некоторых библиотек обработки селена. Объект селеном WebDriver инициализируется в проекте B и вернулся в А, как это:

Некоторые класс в проекте:

public WebDriver myDriver; 
myDriver = B.initializeWebDriver(myDriver, various selenium related parameters...); 

Затем «A» может использовать инициализированный объект myDriver в тесте TestNG , местом, где он выходит из строя в «B», без трассировки стеки является: метод

initializeWebDriver в проекте B:

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 немедленно заканчивает тест testNG, когда он достигает строки кода в «B», которая создает экземпляр удаленного WebDriver. У меня есть try-catch в A и B, и ничего не происходит. Нет трассировки стека. Нет сообщения журнала. Просто сразу же умирает внутри тестового метода в A, а не прыгает на «catch», но прыгает на «наконец» и заканчивается.

Что заставляет меня быть уверенным, что это проблема управления зависимостями, заключается в том, что если я изменю зависимости от «А» до селена-апи и селен-хром-драйвера и селена-удаленного драйвера, он отлично работает. Но нам не нужно это делать - selenium-java должно быть прекрасным, и селен-java содержит все остальные объекты (селен-api и т. Д.) В любом случае! Я предполагаю, что это какая-то странная проблема CLASSDEF, и я неправильно управляю зависимостью. Я также никогда не видел, чтобы Java просто откровенно отказывался от трассировки стека или ошибок, подобных этому, если только это не очень странная вещь classdef.

Любые идеи?

**

[Edit: дополнительный код предоставляется по запросу]

От 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; 
} 

Из класса в A:

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, чтобы создать remoteWebDriver, он просто умирает как-то без выхода, и идет к «наконец» в А.

Edit: Исправлена ​​проблема, я имел Gradle проект " B 'обеспечить, чтобы он включал зависимость селена в.баночка экспортировали для проекта Б:

from sourceSets.main.output 
from sourceSets.main.allJava 

... и в Maven проект А, я определил зависимость от селена Java (удалено все другие различного селен фляг как селен-апите, и т.д., как это работает сейчас) как сфера: при условии.. Таким образом, это гарантирует, что зависимость selenium-java фактически действительно приобретена из проекта «B».

Но я не понимаю, почему у меня не было возможности, чтобы A и B зависели от selenium-java. Они указали ту же самую версию, и я посмотрел на разрешение зависимости, и оба они действительно использовали одну и ту же версию, в отличие от использования другой версии из-за какого-то конфликта.

[править]

Порядок зависимости перечисленных в файле POM Проект А является то, что сделало его работу, не Gradle изменение или «при условии» изменения. Просто перечисление selenium-java сначала в pom перед проектом B.

+2

Вы пытаетесь поймать 'Throwable'? Можете ли вы показать код с помощью try-catch-finally? – alexbt

+0

Я не пытался бросить, но есть доказательство того, что его все равно не поймали. Вот код/​​вывод: – borisivan

+0

где код/​​вывод? – alexbt

ответ

0

Я не знаю, почему вы не получаете стек. Возможно, вы завершаете программу в своем методе closeBrowser? Это приведет к короткому замыканию ошибки и объяснит, почему вы не получаете неперехваченное исключение stacktrace.

Во всяком случае, для отладки цели, попробуйте следующее:

Вы ловли Exception, так Error s игнорируются. Измените свой try-catch, чтобы поймать Throwable. Это позволит вам поймать любые возможные ошибки.

try{ 
    ... 
} catch (Throwable e) { 
    System.out.println("caught in A"); 
    e.printStackTrace(); 
} 
+0

Спасибо alexbt! Это помогло совсем немного. Упрощенный, но я также новичок в переполнении стека, чтобы он еще не появился. – borisivan