Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Опишите возможен ли такой функционал))))


(Cybernetic2045) #1

В ходе написания  тестов в среде IDE я понял что не весь нужный мне функционал  достижим либо я не наслышан о нем.

Описываю проблему конкретно.  Автоматизирую работу одного сайта .  На сайте  имеется несколько полей    iframe. Каждый такой элемент имеет свой идентификатор.

Если "ифрейм" с доменом другого сайта то при обращении к элементам вложенным в это поле методами WebDrivera  по сути должно происходить перенаправление на домен самого поля   iFrame c последующим открытием новой вкладки в окне браузера.  Методом click все работает обратиться как я понял ко вложенным в iFrame элемент можно. Но по какой причине  при проходе скрипта  не открываеться новая вкладка ?  Есть ли  в инструментарии селениума  методы работы с несколькими отдельными вкладками , переключения между ними с обменом данных  между веб страницами. Приведу пример.  Открыл я свой сайт в одной вкладке на сайте есть какая либо  уникально генерируемая информация. Мне нужно произвести переход из iFrame  на другой домен с передачей этой инфы в текстовое поле второго. Перенос данных  в дочернюю вкладку из родительской.

Имеется  <iframe id="Мой фрейм" scrolling="no" width="120" height="60                                      

                     <a id="Фрейм младший" class=" 5b"                                                                               

                     <span>Подпись элемента постоянно меняется</span>                               

 

Основной вопрос в следующем.  Какими методами можно работать с элементом  Фрейм младший не применяя привязок к подписи этого элемента Подпись элемента постоянно меняется  произвести клик по нему.  Передать данные этого сайта на страницу сайта открывшегося в новой вкладке после этих действий.

Рассмотрю любые предложения по реализации)))


(apetrovskiy) #2

Переход в фрейм по индексу, затем по id="Фрейм младший", затем на нем вызвать клик - пробовали?


(DRoss) #3

Cybernetic2045, к сожалению я не совсем понял что именно Вы хотите. Из конкретного

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

для случаев, когда неизвестен идентификатор вкладки могу вам подсказать следующее (образец кода на c#):

 ReadOnlyCollection<string> handlers = WebDriver.WindowHandles;
            foreach (string handler in handlers)
            {
                WebDriver.SwitchTo().Window(handler);
                [Здесь нужно поставить проверку на то, что уникальный для этого фрейма/вкладки элемент присутствует. Если да, то оборвать цикл]

            }

 


(mbeider) #4

 

public static void switchFrame(String id){
 
List<WebElement> frameset = WebDriver.findElements(By.tagName("iframe"));  
 
try {
     for(WebElement frame : frameset )
       {
        if(frame.getAttribute("id").indexOf(name) != -1)
          {
           WebDriver.switchTo().frame(frame.getAttribute("id"));
           Thread.sleep(500,0);
           WebDriver.switchTo().activeElement();
           break;
          }
      }
} catch (Throwable t) 
   {
    System.out.println("new frame switch failed. retrying." + t);
   }
}
 
public static void defaultFrame(){
 
try {
     WebDriver.switchTo().defaultContent();
     Thread.sleep(500,0);
     WebDriver.switchTo().activeElement();
 
    } catch (Throwable t) {
     System.out.println("default frame switch failed. retrying.");
    }
}