JBrowser не функционирует вместе с Selenide

webdriver
selenide
Теги: #<Tag:0x00007f7b6910e730> #<Tag:0x00007f7b6910e398>

(All Safe) #1

Проблема заключается в том, что непонятно почему, при использовании JBrowser для тестов совместно с selenide, мои тесты падают на простом коде, при этом в браузерах Chrome и Firefox все работает правильно.

У меня есть такой тест:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = EditorConfig.class)
@EnableAutoConfiguration
public class MySimpleTest {

    @LocalServerPort
    int port;

    @Before
    public void setUp() {
        Configuration.baseUrl = "http://localhost:" + port;
        Configuration.browser = System.getProperty("browser", WebDriverRunner.JBROWSER);
    }

    @Test
    public void campaignsExist() {
        open("/");

        $("#btn-add").click();
        $("#campaignNameInput").setValue("TestName");
        $(By.name("campaignStartDate")).find(tagName("input")).setValue("25.11.2018").click();
        $(By.name("campaignExpirationDate")).find(tagName("input")).setValue("30.11.2018").click();
        $("#btn-finish").click();

        $$(By.xpath("//span[@class='campaign-data']")).shouldHaveSize(2);
        $$(By.xpath("//span[@class='campaign-data']")).first().shouldHave(text("TestName (с 25.11.2018 до 30.11.2018)"));
    }
}  

Вся проблема в том, что тест свалился с такой ошибкой:

Element not found {#campaignNameInput}
Expected: visible

Timeout: 4 s.
Caused by: NoSuchElementException: Element not found or does not exist.
	at com.codeborne.selenide.impl.WebElementSource.createElementNotFoundError(WebElementSource.java:34)
	at com.codeborne.selenide.impl.ElementFinder.createElementNotFoundError(ElementFinder.java:100)
	at com.codeborne.selenide.impl.WebElementSource.checkCondition(WebElementSource.java:62)

Но это поле существует, и тест работает в Chrome и Firefox!

В pom.xml я добавил следующие зависимости:

<dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-api</artifactId>
            <version>3.141.59</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.codeborne</groupId>
            <artifactId>selenide</artifactId>
            <version>5.0.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.machinepublishers</groupId>
            <artifactId>jbrowserdriver</artifactId>
            <version>1.0.1</version>
            <scope>test</scope>
        </dependency>

Подскажите, что не так и в какую сторону копать?


(asolntsev) #2

Так может, этот jbrowser просто кривой?

А зачем вам вообще JBrowser? Почему бы на хроме тесты не гонять?


(All Safe) #3

А если на машине разработчика не будет установлено браузеров Chrome или Firefox? По умолчанию хотелось бы запускать автотесты в каком-нибудь бразуере, который просто подключается как зависимость в maven.


(Vasiliy Rakshin) #4

Сомневаюсь, что у разработчика не будет установлено браузера, скорее всего будет тот и тот. Вы можете скачать последнюю сборку Хрома/Хромиума/ФФ и положить её в проект и указывать путь к экзешнику. Вам же надо чтобы ваше приложение железобетонно отрабатывало в браузере, а все эти сторонние реализации не гарантируют хорошую отработку скриптов/css, вы больше потеряете используя их.


(Maxim Andryushchenkov) #5

Таких людей надо лечить, а не софт для них писать


(All Safe) #6

А можно вообще использовать Headless версию хрома? Как указать путь к нему? Насколько понял, браузер задается строкой WebDriverRunner.JBROWSER, при этом скачивая нужный вебдрайвер


(All Safe) #7

Вы говорите к exe. Допустим, у меня рабочий комп на Ubuntе, у другого разработчика на винде. Вот как тут быть? Поэтому и хотелось подкинуть универсальный браузер и все гонять на нем по умолчанию, а если хочешь специфичный использовать, будь добр указать переменную среды и нужным параметром.


(Vasiliy Rakshin) #8

Нуу соверую почитать про

Configuration.browserBinary
Configuration.headless

Если браузеры установлены по стандартному пути, то не надо использовать первый параметр.
А если вы сами где-то храните браузер - то сами и устанавливаете переменную в зависимости от платформы.


(All Safe) #9

Опять же непонятно где его хранить, таскать с собой в проекте, так себе идея.


(Vasiliy Rakshin) #10

Так я и не агитирую его хранить в проекте. Самое простое - установить на машину стандартным путём и забыть о этой проблеме. От вас только требуется озвучить что для запуска тестов на машине необходим установленный браузер.