t.me/atinfo_chat Telegram группа по автоматизации тестирования

Selenide работающий тест падает в iframe

Теги: #<Tag:0x00007f748a259bc0> #<Tag:0x00007f748a259990> #<Tag:0x00007f748a259800> #<Tag:0x00007f748a2596c0> #<Tag:0x00007f748a259558>

Здравствуйте, пытаюсь понять и устранить причину падения теста в iframe

Есть форма

https://api.carvago.com/marketing/sauto/calculator?customId=23545652&priceFormat=249900&click=https://i.imedia.cz/clickthru?spotId=2740202&section=/osobni/klient&collocation=9742%20key6&passon.customId=23545652&passon.priceFormat=249900&passon.id=18688547&r=tV2LN%2Bwe24Uj9MWOeaP9snJ6y14-6-1&destination

Для которой я написал работающий тест на заполнение.

public class Calculator {
    @Test
    public void userCanSendCalculatorForm() {

        //WebDriverManager.chromedriver().version("83").setup();

        //Open Calculator Form
        open("https://api.carvago.com/marketing/sauto/calculator?customId=23545652&priceFormat=249900&click=https://i.imedia.cz/clickthru?spotId=2740202&section=/osobni/klient&collocation=9742%20key6&passon.customId=23545652&passon.priceFormat=249900&passon.id=18688547&r=tV2LN%2Bwe24Uj9MWOeaP9snJ6y14-6-1&destination");
        //Click Akontace
        $("[id='calculation-form_advance']").click();
        //Choose 20% 
        $("[id='calculation-form_advance']").selectOption(2);

        //Click Month
        $("[id='calculation-form_months']").click();
        //Choose 2 month 
        $("[id='calculation-form_months']").selectOption(2);

        //Fill the name
        $("[id='calculation-form_name']").setValue(RandomString.getStringByFormat(10, RandomString.LETTERS_AND_NUMBERS));
        //Fill the Email
        $("[id='calculation-form_email']").setValue(RandomString.getStringByFormat(10, RandomString.LETTERS_AND_NUMBERS) + "@automation.test");

        //Set checkbox true
        $("[id='calculation-form_agreement']").setSelected(true);

        //Click button
        $("[id='calculation-form_submit']").click();

        //Confirmation text control
        $("[id='calculation-form']").shouldHave(Condition.text("Děkujeme za Váš zájem"));
    }

}

тест рабочий на 100%

Далее я хочу провести этот тест на странице, где находится эта форма.
Например https://www.sauto.cz/osobni/detail/ford/mondeo/18592795?company=1&goFrom=list (под фотками машины форма с процентами)
Она расположена в двух айфреймах.
Поэтому я написал такое решение

public class Spage {
    @Test
    public void userCanSendAllForm() {


        //Open Carvago list
        open("https://www.sauto.cz/detail-prodejce/carvago/9742");
        //Choose auto
        switchTo().frame($("[id='iframe']"));
        $x("(//img[@class='mainPhoto loaded_img'])[1]").click();
        //Calculator Form
        switchTo().frame($("#adFrameSmall iframe"));
        switchTo().frame($("#banner2796250 iframe"));

        //Click Akontace
        $("[id='calculation-form_advance']").click();
        //Choose 20%  
        $("[id='calculation-form_advance']").selectOption(2);

        //Click Month
        $("[id='calculation-form_months']").click();
        //Choose 2 month  
        $("[id='calculation-form_months']").selectOption(2);

        //Fill the name
        $("[id='calculation-form_name']").setValue(RandomString.getStringByFormat(10, RandomString.LETTERS_AND_NUMBERS));
        //Fill the Email
        $("[id='calculation-form_email']").setValue(RandomString.getStringByFormat(10, RandomString.LETTERS_AND_NUMBERS) + "@automation.test");


        //Set checkbox true  (не отмечается чекбокс)
        $("[id='calculation-form_agreement']").setSelected(true);

        //Click button (кнопка не нажимается)
        $("[id='calculation-form_submit']").click();

        //Confirmation text control (и на этом шаге падает)
        $("[id='calculation-form']").shouldHave(Condition.text("Děkujeme za Váš zájem"));

        //unfocus iframe
        switchTo().defaultContent();

И тут начинается мистика, у меня выполняются все шаги кроме трех последних
То есть - почему то НЕ активируется чекбокс и не нажимается кнопка.
И проблема именно в том тесте, где я работаю с айфреймами, без айфреймов - все окей

Пожалуйста подскажите в чем может быть проблема

опытным путем понял, что selenide “думает”, что отметил checkbox и нажал кнопку, но на деле, в браузере, чекбокс не отмечен и нажатия не произошло

Попробуйте просто кликнуть по чекбоксу, но лучше добавить проверку, вдруг поменяют дефолтное значение
if(!selected){
Click
}

вот такой костыль помог

//Set checkbox true
//$("[id='calculation-form_agreement']").setSelected(true);
        JavascriptExecutor checkbox;
        checkbox = (JavascriptExecutor)getWebDriver();
        checkbox.executeScript("document.getElementById('calculation-form_agreement').click();");


//Click button
//$("[id='calculation-form_submit']").click();
        JavascriptExecutor button;
        button = (JavascriptExecutor)getWebDriver();
        button.executeScript("document.getElementById('calculation-form_submit').click();");

а попробуйте переключится на дефолтный фрейм и обратно, может фокус слетает как то

У меня тоже были проблемы с checkbox, поэтому решил просто кликать по тому checkbox, который нужен

private ElementsCollection radioTypeChannel = $$("form.custom-radio label");

public ChannelsPage clickTypeChannel(String type){
        radioTypeChannel.findBy(Condition.text(type)).find("i").click();
        return this;
    }