Selenium IDE фреймы

selenium-ide
selenium-builder
Теги: #<Tag:0x00007fedbc9f65f8> #<Tag:0x00007fedbc9f62d8>

(Elena) #1

В автоматизации я пока что новичок.

Вникаю в Selenium IDE.

Возник вопрос.

Есть поле "Текст заметки" с фреймом. Вид http://imm.io/Dn2D

<iframe frameborder="0" allowtransparency="true" tabindex="0" src="" title="Rich text editor, field_noteeditor, press ALT 0 for help." style="width:100%;height:100%">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="ru" dir="ltr">
<head>
<body class="cke_show_borders" contenteditable="true" spellcheck="false" style="overflow-y: scroll;">
<p>
<br type="_moz">
</p>
</body>
</html>
</iframe>

Никак не могу добится операции клика и набора текста  в этом поле на Selenium IDE.

 


(Mykhailo Poliarush) #2

покажите, код вашего теста, который вы сделали?

я подразумеваю, что не делаете переключения в фрейм

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


(Elena) #3

вот что касается фрейма:

selectFrame   xpath=/html/body/div/div/div[5]/div/div[5]/div/div/div/div[3]/span/span[2]/span/table/tbody/tr[2]/td/iframe

type   ???

selectFrame   relative=parent

 


(Elena) #4

Уточняю ситуацию.

 focus с xpath=/html/body, вставляет курсор в правильное место, но type з теми же параметрами не пишет.

http://imm.io/DnFN


(Mykhailo Poliarush) #5

во первых, избегайте вот таких вот локаторов xpath=/html/body/div/div/div[5]/div/div[5]/div/div/div/div[3]/span/span[2]/span/table/tbody/tr[2]/td/iframe

посмотрите видео, как правильно писать локаторы 

во вторых у вас проблема, не в фрейме, а в том, что type команда работает для input поля

вот потому, у вас и не печатает

а можно как-то отключить этот редактор? или суть в том чтобы протестировать сам редактор ввода данных?

как можно подругому ввести данные, ну например, через javascript


(qaleader) #6

Судя по названию ID элементов вы пытаетесь тестировать CKE Editor. Ровно такую задачу я выполнил в прошлом месяце, покрыв автотестами 99% его функциональности. У вас ошибка в локаторе, используйте названия фреймов или конструкции типа

Или обращайтесь к феймам по индексу...

Посмотрите описание используемой вами команы selectWindow - "Selects a frame within the current window. (You may invoke this command multiple times to select nested frames.) To select the parent frame, use "relative=parent" as a locator; to select the top frame, use "relative=top". You can also select a frame by its 0-based index number; select the first frame with "index=0", or the third frame with "index=2". You may also use a DOM expression to identify the frame you want directly, like this: dom=frames["main"].frames["subframe"]"

Если у вас возникают трудности могу помочь, но вы лучше не скриншоты, а исходный код страницы прикрепляйте, а еще лучше используйте запись тестов, селениум сам запишет вам имя фрейма.


(Elena) #7

Вот код:

<div class="title">
Текст заметки
<span>*</span>
</div>
<textarea id="field_noteeditor" rows="10" cols="80" style="visibility: hidden; display: none;"></textarea>
 
<span id="cke_field_noteeditor" class="cke_skin_kama cke_1 cke_editor_field_noteeditor" lang="ru" aria-labelledby="cke_field_noteeditor_arialbl" role="application" title=" " dir="ltr">
<span id="cke_field_noteeditor_arialbl" class="cke_voice_label">Rich Text Editor</span>
 
<span class="cke_browser_gecko" role="presentation">
 
<span class="cke_wrapper cke_ltr" role="presentation">
 
<table class="cke_editor" cellspacing="0" cellpadding="0" border="0" role="presentation">
 
<tbody>
 
<tr role="presentation" style="-moz-user-select: none;">
 
<td id="cke_top_field_noteeditor" class="cke_top" role="presentation">
</tr>
 
<tr role="presentation">
 
<td id="cke_contents_field_noteeditor" class="cke_contents" role="presentation" style="height:700px">
 
<iframe frameborder="0" allowtransparency="true" tabindex="0" src="" title="Rich text editor, field_noteeditor, press ALT 0 for help." style="width:100%;height:100%">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html lang="ru" dir="ltr">
 
<head>
<title data-cke-title="Rich text editor, field_noteeditor, press ALT 0 for help.">Rich text editor, field_noteeditor, press ALT 0 for help.</title>
 
<link href="/css/style-ckeditor.css" rel="stylesheet" type="text/css">
 
<style data-cke-temp="1" type="text/css">
</head>
 
<body class="cke_show_borders" contenteditable="true" spellcheck="false" style="overflow-y: scroll;">
 
<p>
</body>
</html>
</iframe>
</td>
</tr>

polusok, это поле "Текст заметки" обязательно должно быть заполнено.

Спасибо за видео. Изучаю....

qaleader пробую.....


(qaleader) #8

Попытался помочь Елене.

Товарищи кто глубже знаком с IDE подскажите пожалуйста почему он не хочет вводить текст в этот фрейм? Реализовал ту же логику на WebDriver там все работает и текст вводится. Возможно это баг самого IDE? Вот код для IDE 

 

 

Вот код рабочий код вебдрайвера на C#:

 

driver.Navigate().GoToUrl("http://www.rutraveller.ru/");
            driver.FindElement(By.LinkText("Вход")).Click();
            driver.FindElement(By.Id("field_loginemail")).Clear();
            driver.FindElement(By.Id("field_loginemail")).SendKeys("mymail@mail.ru");
            driver.FindElement(By.Id("field_loginpassword")).Clear();
            driver.FindElement(By.Id("field_loginpassword")).SendKeys("mypassword");
            driver.FindElement(By.XPath("//*[@id='popupLogin']/div/div/div[4]/a")).Click();
            Thread.Sleep(1000);
            driver.FindElement(By.LinkText("Заметки")).Click();
            driver.FindElement(By.CssSelector("strong.side-note-add-strong")).Click();
            driver.FindElement(By.CssSelector("div.content-wrap > div.clear > div.leftbar")).Click();
            driver.FindElement(By.Id("field_notename")).Clear();
            driver.FindElement(By.Id("field_notename")).SendKeys("Тест 2");
            driver.SwitchTo().DefaultContent();
            driver.SwitchTo().Frame(driver.FindElement(By.XPath("//iframe")));
            driver.FindElement(By.XPath("//body")).Clear();
            driver.FindElement(By.XPath("//body")).SendKeys("Enter this test!!!");
            Thread.Sleep(60000);

 


(Alexander Petrovich) #9

Лень ставить IDE, но попробуйте
На питоне пользовал CKEeditor, не хотел ничего писать в поле, пока я не кликнул в него

def select_long_decription(self):
        self.driver.switch_to_frame(self.driver.find_element_by_tag_name("iframe"))
        mouse_click(self.driver, "html/body")
        self.driver.execute_script('document.body.innerHTML = "%s"' % random_long_description)

        self.driver.switch_to_default_content()

 

метод mouse_click пожаловал из action chains, потому что обычным driver.find_element_by_xpath(xpath).click() кликать не хотел

Текст вставлял джава скриптом, потому что он огромный :) Не могу себе позволить ждать печатанья 15000 символов

PS на каком моменте повисает тест? Именно воода?


C помощью Selenium Webdriver не могу ввести текст в редактор tinymce
(Mykhailo Poliarush) #10

а можете кинуть ссылочку на похожий редактор где-то в интернете

чтобы можно было попробовтаь


(qaleader) #11

Проблема только в самом IDE, при использовании Webdriver все работает корректно. Ошибка на моменте ввода текста в фрейм - ничего не вводится, при этом тест не падает.  Я тоже раздумывал над тем чтобы выполнить этот клик и ввод текста с помощью JavaScript ...


(qaleader) #12

Там, к сожалению, проблема не с редактором, а с самой страницей, куда его встроили. Вот -  rutraveller.ru, после входа в аккаунт нужно нажать на кнопку "Заметки" (Справа). Возможно вы поймете в чем проблема при использовании именно Selenium IDE. Я первый раз с таким столкнулся, пример рабочего кода на Webdriver ниже, и пример кода для IDE тоже ниже. Затык именно на шаге ввода текста в этот фрейм.


(Mykhailo Poliarush) #13

просто ссылка на похожую тему по CKEditor http://automated-testing.info/forum/selenium-i-wysiwyg-editor-ili-kak-vstavit-tekst-v-vizivik


(TATA) #14

Здравствуйте!

У меня такое же задание - ввести текст во фрейм, делала так:

selectFrame       index=0                                  зашла в фрейм

type                      //body                   TEXT         ввела TEXT

selectFrame      index=top                               вышла из фрейма

 

Только у меня еще одна проблема, мне нужно не просто ввести текст, а установить ему параметры форматирования: на пример, 24 шрифт, жирный

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

Кто знает подскажите можно ли в IDE это сделать (фактически надо тестировать текстовый редктор).

 


(Elena) #15

Вот что получилось :

driver.findElement(By.linkText("Вход")).click();

driver.findElement(By.id("field_loginemail")).clear();
driver.findElement(By.id("field_loginemail")).sendKeys("testa13@ukr.net");
driver.findElement(By.id("field_loginpassword")).click();
driver.findElement(By.id("field_loginpassword")).clear();
driver.findElement(By.id("field_loginpassword")).sendKeys("testa13");
driver.findElement(By.xpath("//*[@id='popupLogin']/div/div/div[4]/a")).click();
driver.findElement(By.cssSelector("span.header-add-material-span")).click();
driver.findElement(By.xpath(".//*[@id='add_material']/div/div[2]/table/tbody/tr[1]/td[3]/a/span")).click();
driver.findElement(By.id("field_notename")).clear();
driver.findElement(By.id("field_notename")).sendKeys("test");
driver.findElement(By.xpath(".//*[@id='form_notePhoto']/div/span[1]/input")).click();
driver.findElement(By.name("fileToUpload")).sendKeys("D:\\123\\1366x768-hd-2.jpg");
 
driver.switchTo().defaultContent();
           driver.switchTo().frame(driver.findElement(By.xpath("//iframe")));
           driver.findElement(By.xpath("//body")).clear();                                                                  ввод текста в фрейм
           driver.findElement(By.xpath("//body")).sendKeys("Текст заметочки!!!!!");
           Thread.sleep(60000);
       driver.switchTo().defaultContent(); - выход из фрейма
 
А вот далее тест не идет, а курсор стоит в поле "текст заметки".
 
Пробовала так:
 
driver.switchTo().defaultContent();
String handle = driver.getWindowHandle();
driver.switchTo().frame(driver.findElement(By.xpath("//iframe")));
driver.findElement(By.xpath("//body")).clear();
driver.findElement(By.xpath("//body")).sendKeys("Текст заметочкииии");
Thread.sleep(6000);            
driver.switchTo().window(handle);

Но ничего.

Как же выйти с этого фрейма?

 


(Elena) #16

Вопрос снимается :)


(Alexander Petrovich) #17

Поделитесь решением для будущих поколений :)


(Mykhailo Poliarush) #18

в чем проблема была?


(user12) #19

Имхо, в Thread.sleep(6000);  :)


(Mykhailo Poliarush) #20

да уж :)