codeception Click context, не кликнуть на элемент

xpath
codeception
locators
webdriver
php
Теги: #<Tag:0x00007f7b705214d8> #<Tag:0x00007f7b70521398> #<Tag:0x00007f7b70521230> #<Tag:0x00007f7b705210f0> #<Tag:0x00007f7b70520f60>

(Shine) #1

Есть сайт https://www.aviasales.ru/
Необходимо сделать скрипт автоматической подписки на билеты.
Для этого захожу в Сервис->Подписки и рассылки->Ввожу почту(можно любую), нажимаю кнопку подписаться, открывается форма “Оформление подписки”, кликаю на кнопку “Гибкие даты”.
Не получается нажать на кнопку месяца (месяц будет передаваться).

Подскажите, что нудно подставить в $I->click(), чтобы я мог нажать на нужный месяц?

Мой код:

        $I->amOnPage('/');
        $I->click("//*[@class='header-menu__label-text']");
        $I->wait(2);
        $I->click('//*[@class="header-menu__service-item --subscription"]');
        $I->fillField("//*[@class=\"input__field\"]", 'mysupermail@inbox.ru');
        $I->wait(2);
        $I->click('//*[@class="button"]');
        $I->wait(2);

        //Кнопка "Гибкие даты"
        $I->click("//*[@id=\"modal_w\"]/div[2]/div[4]/div/div[2]/div[1]/div[2]");
        $I->wait(2);

      //Нажать на ЯНВАРЬ (ТУТ НЕ РАБОТАЕТ)
      $I->click( 'Янв','//*[@class="woody__months-block woody__cf"]/div/div[2]/div/span');

(A) #2

Если ты в Firefox - установи себе TrueXpath и правым кликом он тебе предложит массу вариантов, а еще есть SwdPageRecorder для поиска корректных локаторов :wink:


(Shine) #3

Не поверишь, пробовал пользоваться такими штуками, но с этим сайтом как-то не прокатывает…


(Shine) #4

А кто-нить может предложить работающий вариант?
Там используется фрейм, я на него позиционируюсь, но доступ к элементу получить не получается…


(Ugin Berets) #5

Думаю, что сначала надо переключиться на iframe, а в нём уже совершать дальнейшие действия.

$I->switchToIFrame("popup-subscribe-iframe");
$I->click("//*[@id='modal_w']/div[2]/div[4]/div/div[2]/div[1]/div[2]");
$month = 'Янв';
$I->click( "//*[.='".$month."']");

Помогите разобраться с календарем $I->executeJS - выбор конкретного месяца(даты)
(Shine) #6

Спасибо большое за помощь, все получилось )


(Shine) #7

Подскажи, плиз, как можно подвинуть ползунок цены, чтобы выставить определенную сумму?


(Shine) #8

двинуть ползунок могу, а вот выставить нужную сумму, не получается…


(Ugin Berets) #9

Ну самый простой способ это:

    $price = 115000;
    $priceSlider = "//span[contains(text(),'Цена')]/..//*[contains(@class, 'woody__slider')]";
    $priceSliderPoint = "//span[contains(text(),'Цена')]/..//*[contains(@class, 'ui-slider-handle')]";
    $priceFrom = "//span[contains(text(),'Цена')]/..//*[contains(text(), 'До')]//*[contains(@class,'amount')]";
    $sliderStep = $I->grabAttributeFrom($priceSlider, "step");
    $maxPrice = $I->grabAttributeFrom($priceSlider, "max");

    $stepsQty = ($maxPrice-$price)/$sliderStep;
    for($i = 1; $i <= $stepsQty; $i++){
        $I->pressKey($priceSliderPoint, \WebDriverKeys::ARROW_LEFT);
    }
    $I->waitForText((string)$price, 5, $priceFrom);

Но есть и другие =)


(Shine) #10

спс )