Как открыть несколько вкладок и переключаться по ним ?
#1
Отправлено 09 февраля 2011 - 21:04
Есть задача проверять синхронизацию почтового клиента с GMail. Т.е. нужно зайти на gmail (скажем аккаунт Б), послать на определенный аккаунт письмо (аккаунт А), потом открыть другую вкладку, там зайти на сайт, который получает с нашего аккаунта А письма (и посылает тоже от его имени), убедиться, что только что пришедшее на аккаунт А письмо там показывается. Так же нужно проделывать всякие манипуляции с письмами (переносить в разные папки, отмечать звездой и т.д.) и соответственно переключаться между вкладками для проверки зеркального соответствия.
Вот я и пытаюсь понять как мне в IDE сделать переходы туда-сюда. Гуглил, пробовал, не получается.
Помогите кто чем может !
#2
Отправлено 09 февраля 2011 - 21:18
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#3
Отправлено 10 февраля 2011 - 08:54
Пробовал
<tr> <td>openWindow</td> <td>http://gmail.com/</td> <td>GMail</td> </tr> <tr> <td>selectWindow</td> <td>GMail</td> <td></td> </tr>Но это у меня ен работает. Открывается новая вкладка, а на вторую команду получаю сообщение [error] Could not find window with title GMail
Нашел в настройках браузера, что у меня было указано открывать во вкладках новые окна. Видимо кастомная инсталяха ФФ попалась когда-то. Теперь открывает новые окна. Но ходить по этим окнам мне пока что все равно не получается
#4
Отправлено 10 февраля 2011 - 09:36
#5
Отправлено 10 февраля 2011 - 09:59
Это в IDE можно использовать ? Кажется GetAllWindowTitles в IDE нет...Selenium требует точного совпадения заголовка окна для selectWindow, узнать его можно с помощью GetAllWindowTitles. И заголовок окна появляется не мгновенно, т.е. скорее всего нужно будет подождать (например, с помощью WaitForCondition) и потом уже выбирать нужное окно.
P.S.
Кое-что наваял в питоне для RC. Попросил колегу проверить работает ли у нее при дефолтных настройках браузера ? Хочу быть уверенным в переносимости
#6
Отправлено 10 февраля 2011 - 10:09
Это в IDE можно использовать ? Кажется GetAllWindowTitles в IDE нет...
Все верно, там нет такой команды, в IDE есть команда storeAllWindowTitles,
В IDE проще всего пользоваться комбинацией waitForPopUp, selectPopUP, selectWindow (NULL)
#8
Отправлено 10 февраля 2011 - 16:09
#9
Отправлено 10 февраля 2011 - 18:25
В общем пришлось писать в Selenium RC, чего я хотел избежать. Правда тест постоянно падает в совершенно разных местах, по совсем непонятным причинам. Например, мне нужно было в gmail создавать письмо, а потом на этом письме проверять синхронизацию проверяемого сайта с gmail. Весь день письмо нормально отправлялось, и я решал другие проблемы. Теперь скрипт не может кликнуть по кнопке в gmail "Создать письмо", хоть ты тресни ему ! И непонятно в чем дело. Локатор правильный, весь день работало нормально. А вот к концу дня перестала эта команда срабатывать
Кнопка в IFrame там, на него нужно переключаться. Это, считай, отдельное окно.
#10
Отправлено 10 февраля 2011 - 20:37
Пробовал selectFrame. Но что-то никакой реакции. Правда я опять в IDE пробовал... может надо было через RC сразу ?..Кнопка в IFrame там, на него нужно переключаться. Это, считай, отдельное окно.
#11
Отправлено 11 февраля 2011 - 07:08
Пробовал selectFrame. Но что-то никакой реакции. Правда я опять в IDE пробовал... может надо было через RC сразу ?..
Не стоит из пушек по воробьям. Если в планах не стоит создание тучи автоматизированных тестов, то IDE хватит за милую душу.
Попробуйте в IDE так:
selectFrame | canvas_frame
clickAt | css=div.nM>div.n3>div>div
#12
Отправлено 11 февраля 2011 - 09:10
#13
Отправлено 11 февраля 2011 - 09:17
ну, как я и написал вчера, selectFrame никаких изменений в поведение теста не вносит. Сегодня кнопка "Создать письмо" нажимается (ну, один раз не нажалась). А вот кликать по звездочке сегодня селениум отказывается, без выдачи каких-либо ошибок. Говорит "я кликнул", а звездочка возле письма остается неизмененной. Вот такие дела....
*facepalm*
Если хотите получить совет\помощт\etc. полностью описывайте проблему, прилагая код теста, код страницы, лог.
#14
Отправлено 14 февраля 2011 - 11:15
sel.open("/") sel.wait_for_page_to_load("30000") time.sleep(3) sel.type("login-f_email", login) sel.type("login-f_password", pass) sel.click("login_loginButton") sel.open_window("http://gmail.com/", "GMail") time.sleep(3) sel.select_window("GMail") sel.type("Email", g_login2) sel.type("Passwd", g_pass2) sel.click("signIn") sel.wait_for_page_to_load("60000") time.sleep(5) #sel.click_at("//div[@id=':co']/div[1]/div", "") #sel.click("//div[text()='Compose mail']") sel.select_frame("canvas_frame") sel.click_at("//div[text()='Compose mail']", "") time.sleep(5) sel.type("//textarea[@name='to']", "dmitriytestovich7@gmail.com") rndm_var = sel.get_eval("(((1171*Math.random())*0x1113+Math.random()*0x100)|0)") sel.type("//input[@name='subject']", "test_" + rndm_var) sel.click_at("//div/b[text()='Send']", "") unitTestCase.failUnless(re.search(r"^Send this message without text in the body[\s\S]$", sel.get_confirmation())) time.sleep(30) sel.select_window("null") ... sel.select_window("GMail") time.sleep(1) sel.click("link=Sign out") time.sleep(3) sel.type("Email", g_login1) sel.type("Passwd", g_pass1) sel.click("signIn") sel.wait_for_page_to_load("30000") time.sleep(5) # go to 'Starred' sel.click("link=Starred") time.sleep(4) try: unitTestCase.assertEqual("test_" + rndm_var, sel.get_text("//table/tbody/tr/td[5]/div/div/div[2]/span/b")) except AssertionError, e: unitTestCase.verificationErrors.append("There is no your mail in starred: " + str(e)) time.sleep(5) sel.select_frame("canvas_frame") sel.click_at("//tr[td/div/div/div/span/b[text()='test_" + rndm_var + "']]/td[2]/img", "") # вот эта операция сейчас не отрабатывается sel.select_window("null") sel.click("link=Starred") time.sleep(5) ...
#15
Отправлено 14 февраля 2011 - 14:05
time.sleep(5)такие вещи крайне не кошерны, вместо них лучше использовать waitForElementPressent, waitForCondition и т.п.
Иначе вы постоянно будете натыкаться на плавающие баги, то успел, то неуспел. Либо выставите огромные тайм-ауты, что повлечет за собой увеличение времени выполнения.
#16
Отправлено 14 февраля 2011 - 15:31
#17
Отправлено 14 февраля 2011 - 18:20
Не ужели не возникало проблем с небрежно написанными тестами?
Ещё, кстати, говорят, что к важнейшим качествам тестировщика относятся педантичность и аккуратность.
#18
Отправлено 16 февраля 2011 - 15:15
это не пословица.) это Рокфеллер подобное говорил"Я не такой богатый, чтобы покупать дешевые вещи."
#19
Отправлено 17 февраля 2011 - 20:38
#20
Отправлено 18 февраля 2011 - 05:36
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных