Я уверен, что я делаю что-то неправильно здесь с управлением зависимостями, но не могу это понять.Ошибка проекта 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.
Вы пытаетесь поймать 'Throwable'? Можете ли вы показать код с помощью try-catch-finally? – alexbt
Я не пытался бросить, но есть доказательство того, что его все равно не поймали. Вот код/вывод: – borisivan
где код/вывод? – alexbt