Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Oct 19 05:26

    asolntsev on update_docs

    (compare)

  • Oct 19 05:26

    asolntsev on gh-pages

    Update docs to v6 Merge pull request #16 from sel… (compare)

  • Oct 19 05:26
    asolntsev closed #16
  • Oct 19 05:25
    asolntsev review_requested #16
  • Oct 19 05:25
    asolntsev assigned #16
  • Oct 18 15:40
    BorisOsipov opened #16
  • Oct 18 15:39

    BorisOsipov on update_docs

    Update docs to v6 (compare)

  • Oct 04 20:42

    asolntsev on gh-pages

    fix old typo (compare)

  • Oct 04 11:37

    asolntsev on gh-pages

    update logo and description of … (compare)

  • Sep 30 12:24

    BorisOsipov on gh-pages

    Update 2021-09-28-selenide-5.25… (compare)

  • Sep 28 20:53

    asolntsev on gh-pages

    update gem (compare)

  • Sep 28 20:53

    asolntsev on gh-pages

    publish Selenide 5.25.0 release… (compare)

  • Sep 28 16:30

    asolntsev on gh-pages

    publish Selenide 5.25.0 release… (compare)

  • Sep 21 20:37

    asolntsev on gh-pages

    Selenide 5.24.4: upgrade to Web… (compare)

  • Sep 13 15:13

    asolntsev on gh-pages

    release Selenide 5.24.3 (compare)

  • Sep 02 12:26

    asolntsev on gh-pages

    release selenide 5.24.2 use proper Gradle configuration… (compare)

  • Aug 31 20:53

    asolntsev on gh-pages

    release selenide 5.24.1: upgrad… (compare)

  • Aug 29 21:47

    asolntsev on gh-pages

    release selenide 5.24.0 (compare)

  • Aug 29 21:06

    asolntsev on gh-pages

    release selenide 5.24.0 (compare)

  • Aug 29 21:02

    asolntsev on gh-pages

    release selenide 5.24.0 (compare)

Dmitry Munda
@dimkin-eu
а как искать-то элемент ? а xpath ~всё стерпит~ всё найдёт
Andrei Solntsev
@asolntsev
@JustAlexOne Хм… А вот про javax.xml.xpath.XPathFactory я и не подумал… Похоже, вполне себе вариант.
@dimkin-eu Нет, зачем транслировать. Если это xpath - искать по xpath, а если это css - искать по css.
И остаётся вопрос, не существует ли такой строки, которая была бы одновременно и валидным CSS, и валидным XPath.
Dmitry Munda
@dimkin-eu
Andrei Solntsev
@asolntsev
Хм… Я был на этом SeleniumCamp, но на тот доклад не ходил :)
@dimkin-eu Ну, а… как нам это видео помогает?
Dmitry Munda
@dimkin-eu
там на определённый кусок ссылка - где автор всё приводит к базовой задаче - найди элемент
Oleksii Cherevatyi
@JustAlexOne

И остаётся вопрос, не существует ли такой строки, которая была бы одновременно и валидным CSS, и валидным XPath.

я тоже задаюсь этим вопросом. И по большому счёту - это не проблема - если они оба валидны, то найдётся по тому методу, который был первый в очереди ( я бы первым сделал css) ;)
Но я в таком варианте вижу пока одно НО - если допустим, есть такая строка, которая является и валидным и xpath, и валидным css, то тогда может не сработать проверка на то, что на паренте вызывают xpath без точки вначале - типа $("parent").$("/some_xpath") - в таком варианте, если пойдёт по css ветке, то не отработает проверка на то, что xpath должен начинаться с точки

хотя опять-таки, если локатор начинается с "/some_locator" - то это уже точно не валидный css локатор, следовательно - это точно xpath :) - и вызовется проверка на xpath starting with slash
Boris Osipov
@BorisOsipov

wdio кушает в $/$$ любой селектор без явного указания что это ( а потом транслирует всё в xpath )

ничего он не транслирует в xpath

вообще ни разу. а сначала пытается найти что это за селектор, а если не нашел считает что это css
Dmitry Munda
@dimkin-eu

https://youtu.be/jOmvPpzLMf8?t=1269

what wdio does here in background - creates XPath and runs it

Boris Osipov
@BorisOsipov
да хрен с ним что Криштан там говорит если есть сорцы)
а да вижу, кое-чего он в xpath превращает
но ограничено офк
Dmitry Munda
@dimkin-eu
но вопрос в другом-то
скармливать $/$$-ам что угодно, а @asolntsev пусть разбирается :D
Oleksii Cherevatyi
@JustAlexOne
image.png
Как минимум - валидным css и xpath - будет "*". И что интересно, если искать один элемент, типа \$("звёздочка") и \$x("звёздочка"), то оба находят одинаковый элемент - всю страничку. А вот если искать коллекцию, через \$\$("звёздочка") или \$\$x("звёздочка"), то xpath находит коллекцию с одним элементом, а css находит все элементы
Boris Osipov
@BorisOsipov

скармливать $/$$-ам что угодно, а @asolntsev пусть разбирается :D

именно поэтому я не тащу это из wdio в селенид. там сделать то не сложно. но мне не понятно валидна ли регулярка из wdio для xpath во всех кейсах

с другой стороны в wdio давно это есть и вроде не сильно народ жалуется
если кому-то интересно в вдио вот реализация
(учитывайте что там много селекторов не для веба)
Oleksii Cherevatyi
@JustAlexOne

если кому-то интересно в вдио вот реализация

интересно, то есть они считают xpath-ом только два слеша?

Boris Osipov
@BorisOsipov
нет конечно
const XPATH_SELECTORS_START = [ '/', '(', '../', './', '*/' ]
Oleksii Cherevatyi
@JustAlexOne
а, всё, увидел
Boris Osipov
@BorisOsipov
ага. мне казалось раньше была регулярка)
Oleksii Cherevatyi
@JustAlexOne
Подскажите, в чём может быть проблема - форкнул selenide проект, склонил, ничего не менял, запускаю integration тесты, около 40% падают. Падают, как я и подозревал - с включённым прокси - вопрос - что не так?
Andrei Solntsev
@asolntsev
Ясновидцев нет. С какой ошибкой хоть падают?
Oleksii Cherevatyi
@JustAlexOne
Да, сорри
image.png
СТраница не открывается на всех тестах
Oleksii Cherevatyi
@JustAlexOne
Я так понимаю, у меня проблема, которая обсуждалась здесь - https://automated-testing.info/t/browsermob-proxy-java-webdriver-pomogite-zapustit-prostejshij-test/4531/8
Но там решения нет )
Andrei Solntsev
@asolntsev
@JustAlexOne Не уверен, что там та же проблема. Похоже, на твоём компе резолвится имя хоста какое-то неправильное. Попробуй задать -Dselenide.proxyHost=127.0.0.1
Oleksii Cherevatyi
@JustAlexOne
Попробовал, спасибо, но не помогло
Denis Gaievskyi
@dengayevskiy-sb
Привет! Я использую прокси Сonfiguration.fileDownload = FileDownloadMode.PROXY для скачивания файлов. Решил попробовать запускать selenide тесты вместе с test-containers. Для этого, насколько я понял, необходимо поднять прокси самому и передать его в WebDriverRunner. Вопрос -> какую конфигурацию селенид хочет в конструктор прокси? SelenideProxyServer proxyServer = new SelenideProxyServer(Configuration?, null);
Если я передаю туда new SelenideConfig(), то вся конфигурация, которая выставляется в @BeforeEach, например, Configuration.timeout = globalTimeout игнорируется.
Denis Gaievskyi
@dengayevskiy-sb
@JustAlexOne нам помогло Configuration.proxyHost = "0.0.0.0";
Andrei Solntsev
@asolntsev
@dengayevskiy-sb для того, чтобы использовать TestContainers, вовсе необязательно самому создавать вебдрайвер и дергать WebDriverRunner. Тут рабочий пример: https://github.com/selenide-examples/testcontainers
Denis Gaievskyi
@dengayevskiy-sb

@asolntsev Я этими примерами как раз и пользовался. Там каждый тест в @Before достает вебдрайвер из контейнера и передает в селенидовский вебдрайвер ранер.

  @Rule
  public BrowserWebDriverContainer chrome =
      new BrowserWebDriverContainer()
          .withCapabilities(DesiredCapabilities.chrome());

  @Before
  public void setUp() {
    RemoteWebDriver driver = chrome.getWebDriver();
    WebDriverRunner.setWebDriver(driver);

А я должен передать еще и прокси в WebDriverRunner -> WebDriverRunner.setWebDriver(driver, proxyServer);

Oleksii Cherevatyi
@JustAlexOne

@JustAlexOne Не уверен, что там та же проблема. Похоже, на твоём компе резолвится имя хоста какое-то неправильное. Попробуй задать -Dselenide.proxyHost=127.0.0.1

@JustAlexOne нам помогло Configuration.proxyHost = "0.0.0.0";

Я подразобрался с ситуацией.
Во-первых, после рекомендации Андрея, я неправильно проставил proxyHost и получил ложный негативный результат - поскольку подставлял proxyHost=127.0.0.1 через системную пропертю, но это значение перед тестом всё равно перетирается на пустую строку в integration.IntegrationTest#resetSettings(). Потом я всё-таки докопался и обнаружил, что да - простановка proxyHost=127.0.0.1 или localhost, или 0.0.0.0 - помогает.
Решил копнуть глубже. Поднял убунту виртуалку, запустил тест там - там proxyHost проставлять не нужно - тесты работают сразу, прокся подымается и запросы идут через неё. Копаем дальше.
Докопался вот до такого метода в browserup-proxy, который "пытается" зарезолвить имя хоста для простановки будущему прокси серверу:

    /**
     * Attempts to retrieve a "connectable" address for this device that other devices on the network can use to connect to a local proxy.
     * This is a "reasonable guess" that is suitable in many (but not all) common scenarios.
     * TODO: define the algorithm used to discover a "connectable" local host
     *
     * @return a "reasonable guess" at an address that can be used by other machines on the network to reach this host
     */
    public static InetAddress getConnectableAddress() {
        try {
            return InetAddress.getLocalHost();
        } catch (UnknownHostException e) {
            throw new RuntimeException("Could not resolve localhost", e);
        }
    }

По сути, тут ничего такого, чисто java.net.* код
На моём компе, этот код возвращает hostname машины, что-то вроде 'alex-macbook'. Потом результат этого метода передаётся в метод com.browserup.bup.client.ClientUtil#createSeleniumProxy()
и на этом адресе стартует прокся, что-то типа http://alex-macbook:65743 - в таком варианте, браузер не достукивается до прокси и я вижу сообщение "No Internet", про что я писал ранее.
Копаю дальше.
Выясняется, что вот этот хостнейм 'alex-macbook' не замаплен на локалхост в /etc/hosts.
После добавиления строки 127.0.0.1 localhost alex-macbook в файл /etc/hosts - всё заработало и без проставления proxyHost в селенид

Oleksii Cherevatyi
@JustAlexOne
И теперь остаётся вопрос - что с этим всем делать?
Снаружи выглядит как-будто селенидовская прокся не работает. По факту - "недонастройка" операционной системы - если это можно так назвать. Я не знаю когда и при каких условиях хостнейм машины должен попадать в маппинг в файле /etc/hosts.
Мне видятся такие варианты:
1) Написать не это дело какой-то интеграционный тест в селениде? - пока не придумал какой
2) На стороне селенида - перед стартом прокси, парсить содержимое файла /etc/hosts и предупреждать пользователя если мапинг не найден? Не знаю, работать будет, но надо ли?
3) Всегда стартовать проксю на локалхосте и не резолвить хостнейм вообще? - тоже не знаю, может ли у кого-то прокся быть не на локалхосте
4) Задокументировать, так сказать для тех, кто столкнётся с таким же
5) Ничего не делать :)
@asolntsev
velios
@velios
Доброго времени суток. Возможно ли Command<> сделать для ElementsCollection? Для использования например elementColl.execute(customChechSize(2)) по аналогии с Command<> для SelenideElement
Andrei Solntsev
@asolntsev
@JustAlexOne крутое расследование! Я в своё время похожую багу в селениум зарепортил: SeleniumHQ/selenium#489
И ещё такую: SeleniumHQ/selenium#3048
@JustAlexOne и похоже, что этот фикс в селениуме исправил проблему: SeleniumHQ/selenium@f0f8def
Andrei Solntsev
@asolntsev
@velios сейчас такого нет. Наверное, можно сделать. Но как-то пока не просил никто.
Andrei Solntsev
@asolntsev
@velios погоди-ка, я что-то туплю. Ведь тебе нужно не действие с коллекцией, а проверка, так? Тогда просто вызови $$().shouldHave(new ТвойCollectionCondition())