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)

Andrei Solntsev
@asolntsev
По идее можно было бы запилить, если по строке всегда можно однозначно определить, это css или xpath. Я слышал, что когда-то в Thucidydes была такая фича, и с ней были проблемы: иногда он неправильно определял. Но сам я этот вопрос детально не изучал.
Однажды мне скинули для примера код, который вроде как умеет определять, CSS или Xpath:
sergueik/selector_validators@479f35a
Dmitry Munda
@dimkin-eu
wdio кушает в $/$$ любой селектор без явного указания что это ( а потом транслирует всё в xpath )
Oleksii Cherevatyi
@JustAlexOne
image.png
Как раз у меня был открыт пример с Serenity (aka Thucidydes), и там они проверяют по локатору - это xpath или нет, и потом дёргают соответствующий find метод
определяют через javax.xml.xpath.XPathFactory
не знаю, насколько стабильно она будет отличать css от xpath-a

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

ну вот да, тут тож есть варианты - как это реализовать - либо всё в xpath транслировать, либо как я описал - определять тип локатора и вызывать соответствующий метод. Как по мне - транслировать всё в xpath - это overhead

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);