Перейти к содержимому

Фотография

Как переключиться во фрейм — switchTo().frame?

selenium java

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1 bent533serg

bent533serg

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Sergio

Отправлено 16 января 2019 - 08:22

Привет! Нужно во фрейм переключиться, но через wd.switchTo().frame("fssarmiframe"); не переключает, поэтому сделал через Action. Тоже падает, элемент по которому клик нужно сделать не находит, может переключение так и не произошло? т.к. Xpath корректный. 

Падает где точка останова

 protected  void  openCheckFLK() throws InterruptedException {
        Thread.sleep(3000);
        Thread.sleep(3000);
        Thread.sleep(3000);
        Thread.sleep(3000);


    //    wd.switchTo().defaultContent();
        //wd.switchTo().frame(wd.findElement(By.xpath("//iframe[@src='https://portal-dev.fss.local/fssarm/?']")));
      //  wd.switchTo().frame(wd.findElement(By.xpath("//div[@class='portlet-boundary portlet-boundary_48_ portlet-static portlet-static-end portlet-borderless portlet-iframe ']//iframe[@src='/fssarm/?']")));

        WebElement myframe = wd.findElement(By.xpath("//*[@id=\"fssarmiframe\"]"));
        Actions actionWithYourFrame = new Actions(wd);
        actionWithYourFrame.moveToElement(myframe).build().perform();
        myframe.click();
    //    wd.switchTo().frame(wd.findElement(By.xpath("//*[@id=\"fssarmiframe\"]")));
     //   wd.switchTo().frame("fssarmiframe");
   //     wd.switchTo().frame(0);



        //  wd.findElement(By.xpath("//*[@id=\"ext-element-77\"]/div[3]")).click();
                                                     //div[@id='ext-element-88']//div[3]

        WebElement admflk = wd.findElement(By.xpath("//div[@id='ext-element-88']//div[3]"));
      //  WebElement admflk = wd.findElement(By.xpath("//div[@id='ext-element-88']//div[@id='ext-element-106']"));


        Actions actionAdmFlk = new Actions(wd);
        actionAdmFlk.moveToElement(admflk).build().perform();
        admflk.click();



        Thread.sleep(3000);
        Thread.sleep(3000);
        wd.findElement(By.id("ext-element-79")).click();
        Thread.sleep(3000);
        Thread.sleep(3000);
        wd.findElement(By.id("button-1323-btnInnerEl")).click();

    }

Прикрепленные файлы


  • 0

#2 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 17 января 2019 - 07:36

У Вас на скрине - только элемент, который Вы хотите кликнуть, плюс скриншот тэга со скриптом, а как выглядит тэг самого фрейма?


  • 0

#3 bent533serg

bent533serg

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Sergio

Отправлено 17 января 2019 - 08:01

Если правильно вас понял тег iframe

 

Прикрепленные файлы


  • 0

#4 bent533serg

bent533serg

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Sergio

Отправлено 17 января 2019 - 08:02

У Вас на скрине - только элемент, который Вы хотите кликнуть, плюс скриншот тэга со скриптом, а как выглядит тэг самого фрейма?

Если правильно понял - тег iframe

Прикрепленные файлы


  • 0

#5 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 17 января 2019 - 13:14

wd.switchTo().defaultContent().switchTo.frame("fssarmiframe") - не помогает?

Насколько я понимаю, у Вас падает уже на следующем шаге, само переключение проходит.

 

С каким конкретно эксепшеном падает скрипт и как Вы определили, что локатор верный?

Учитывая, что у вас там цифры в айдишниках - то, что его Каталон в таком виде нашел ещё не гарантирует, что этот локатор 100% верный (цифры теоретически могут поменяться + Вы ссылаетесь на //div[3], а структура также могла поменяться и тогда Ваш элемент уже не div[3], а div[4], к примеру).

 

Есть ли у Вас контакт с разработчиками? При таком ужасе с атрибутами элементов (с точки зрения автоматизации, не разработки) - чаще всего лучше попытаться договориться с разработчиками о создании фиксированных айдишников на нужных Вам элементах.

 

У Вас есть на пунктах атрибут "data-recordid" - эти айдишники рандомные или соответствуют Вашей БД? 

К примеру, в кусочке кода дерева есть элемент с айдишником ext-element-88. Если data-recordid не рандомное, а фиксированное - его можно было бы найти как "[data-recordid=43] .x-treelist-item-wrap" (ну или "//*[@data-recordid=43]//*[@class='x-treelist-item-wrap']".

Локатор был бы привязан к чему-то более фиксированному и неизменяемому.

Повторюсь - это все только в том случае, если data-recordid - это неизменяемый айдишник (к примеру, записи в БД).

 

п.с.: а вообще, всегда остается вариант с дебаггом. Доходите до поставленного Вами брейкпоинта, нажимаете в браузере ф12 и пробуете найти элемент по указанному локатору - есть ли но на самом деле или нет.


  • 0



Темы с аналогичным тегами selenium, java

Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных