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

Тестирование юзабилити (usability)
онлайн, начало 25 ноября
Автоматизация функционального тестирования
онлайн, начало 27 ноября
Автоматизатор мобильных приложений
онлайн, начало 25 ноября
Тестирование безопасности
онлайн, начало 25 ноября
Фотография

Как обойти проблему ожидания


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

#1 Gnomik

Gnomik

    Активный участник

  • Members
  • PipPip
  • 76 сообщений
  • ФИО:Попов Федор Иванович

Отправлено 16 марта 2008 - 13:17

Например когда логинимся на сайт в Selenium RC как обойти проблему ожидания страницы.Т.е. сделать так чтобы дальше Selenium знал что страница загрузилась и дальше начал выполнять скрипт по сценарию?
  • 0

#2 anon

anon

    Активный участник

  • Members
  • PipPip
  • 95 сообщений
  • ФИО:Stas Seliverstov

Отправлено 16 марта 2008 - 21:39

Например когда логинимся на сайт в Selenium RC как обойти проблему ожидания страницы.Т.е. сделать так чтобы дальше Selenium знал что страница загрузилась и дальше начал выполнять скрипт по сценарию?


А можно подробнее, в чем именно проблема? обычно происходит так:

1) Вводим логин, паоль, selenium.type(...)
2) Жмем Вход selenium.click(...)
3) Ждем пока новая страница загрузится ... selenium.waitForPageToLoad(...)
и идем дальше

с последним не всегда все просто но решаемо
  • 0

#3 Gnomik

Gnomik

    Активный участник

  • Members
  • PipPip
  • 76 сообщений
  • ФИО:Попов Федор Иванович

Отправлено 17 марта 2008 - 09:18

В п.3 нужно указать время ожидания, мне же нужно, чтобы программа сама знала, что страница уже загрузила все элементы и идти дальше по сценарию, например так работает Watir.
  • 0

#4 Shelty

Shelty

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

  • Members
  • Pip
  • 15 сообщений

Отправлено 17 марта 2008 - 09:23

Я обычно делаю WaitForElementPresent или NotPresent для тех элементов, которые ожидаю к появлению, или которыые должны исчезнуть после загрузки страницы.

Меня интересует другой вопрос. Часто на то, чтобы загрузить страницу стандартных 30 секунд не хватает, и тогда sel.open вылетает с таймаутом. Чтобы такого сделать, чтобы он ожидал загрузки дольше?
  • 0

#5 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 17 марта 2008 - 09:34

Я обычно делаю WaitForElementPresent или NotPresent для тех элементов, которые ожидаю к появлению, или которыые должны исчезнуть после загрузки страницы.

Меня интересует другой вопрос. Часто на то, чтобы загрузить страницу стандартных 30 секунд не хватает, и тогда sel.open вылетает с таймаутом. Чтобы такого сделать, чтобы он ожидал загрузки дольше?

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

В крайнем случае, если нехватает стандартного времени, то можно умножить это время на некоторый стандартный коефициент. Например, мы знаем, что некоторая страница грузится раза в 2 долше, чем остальные. Просто, если мы будем обходить ситуацию ,что страница не загрузилась в указанное время, то мы можем схлопотать бесконечный цикл в случае, если страница не загрузилась в принципе ( не найдена, например ).
  • 0

#6 Gnomik

Gnomik

    Активный участник

  • Members
  • PipPip
  • 76 сообщений
  • ФИО:Попов Федор Иванович

Отправлено 17 марта 2008 - 09:37

Я пишу на Python'e и там wait_for_page_to_load(self, timeout-милисекунды) - указывается время задержки.Но я тестю сложные аджаксовые веб-приложения и какую бы задержку не ставил все равно Selenium вылетает.
  • 0

#7 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 17 марта 2008 - 09:38

В п.3 нужно указать время ожидания, мне же нужно, чтобы программа сама знала, что страница уже загрузила все элементы и идти дальше по сценарию, например так работает Watir.

Так ведь это оно и есть. waitForPageToLoad как раз и завершает выполнение, если страница полностью загрузилась или истек период ожидания. Период ожидания нужен для того, чтобы не происходило заклинивания в случае, если страница не найдена или просто где-то повисла загрузка (например серверный скрипт ушел в бесконечный цикл). Это просто пороговое время, дольше которого мы не ждем
  • 0

#8 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 17 марта 2008 - 09:40

Я пишу на Python'e и там wait_for_page_to_load(self, timeout-милисекунды) - указывается время задержки.Но я тестю сложные аджаксовые веб-приложения и какую бы задержку не ставил все равно Selenium вылетает.

А, с Ajax это, конечно, не прокатит, так как перегружается не страница целиком, а только ее часть. В этом случае, как уже выше советовали, ожидайте появления некоторого элемента ,которого не было до этого. Это, пожалуй, наиболее универсальный способ убедиться, что какой-то сегмент страницы обновился
  • 0

#9 NLord

NLord

    Активный участник

  • Members
  • PipPip
  • 108 сообщений

Отправлено 17 марта 2008 - 09:41

В п.3 нужно указать время ожидания, мне же нужно, чтобы программа сама знала, что страница уже загрузила все элементы и идти дальше по сценарию, например так работает Watir.


Подход в духе waitForPageToLoad() + waitForCondition(){например waitForElementPresent()} пробовали?
  • 0

#10 kbar

kbar

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

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Барзаковский Константин Владимирович

Отправлено 17 марта 2008 - 10:49

В п.3 нужно указать время ожидания, мне же нужно, чтобы программа сама знала, что страница уже загрузила все элементы и идти дальше по сценарию, например так работает Watir.


Подход в духе waitForPageToLoad() + waitForCondition(){например waitForElementPresent()} пробовали?


+1
Иногда также подойдет waitForElementNotPresent() + waitForElementPresent()
  • 0

#11 anon

anon

    Активный участник

  • Members
  • PipPip
  • 95 сообщений
  • ФИО:Stas Seliverstov

Отправлено 17 марта 2008 - 11:05

Например когда логинимся на сайт в Selenium RC как обойти проблему ожидания страницы.Т.е. сделать так чтобы дальше Selenium знал что страница загрузилась и дальше начал выполнять скрипт по сценарию?


waitForPageToLoad() не работает для Pop-Up окон, а так же ведет себя очень плохо
в случае редиректа.

Как и советовали надо просто проверять наличие элемента isElementPresent(); -
только не забывать двавать время на загрузку элемента

Либо через waitForCondition()

selenium.open("http://www.google.com");
selenium.click("link=Новости");
selenium.waitForCondition("var element;" +
				"try {element = selenium.browserbot.findElement('xpath=//a[@href=\\\'/news?ned=es_co\\\']');}" +
				"catch(e){element=null;}" +
				"element != null", "30000");
System.out.println(selenium.getText("xpath=//a[@href='/news?ned=es_co']"));

  • 0

#12 Jolly

Jolly

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

  • Members
  • Pip
  • 42 сообщений
  • ФИО:Олег
  • Город:Днепропетровск

Отправлено 18 марта 2008 - 12:12

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

В крайнем случае, если нехватает стандартного времени, то можно умножить это время на некоторый стандартный коефициент. Например, мы знаем, что некоторая страница грузится раза в 2 долше, чем остальные. Просто, если мы будем обходить ситуацию ,что страница не загрузилась в указанное время, то мы можем схлопотать бесконечный цикл в случае, если страница не загрузилась в принципе ( не найдена, например ).
[/quote]


А можно поподробней где находится этот конфигурационный файл и что именно нужно в нем править.
Зарание пасиба
  • 0

#13 NLord

NLord

    Активный участник

  • Members
  • PipPip
  • 108 сообщений

Отправлено 18 марта 2008 - 12:43

А можно поподробней где находится этот конфигурационный файл и что именно нужно в нем править.
Зарание пасиба


Этот файл создаёте и используете Вы сами. В случае Java это какой либо *.properties file в котором лежит что-то в духе
tests.delays.initialload=500000

Пример использования:
Это стандартный джавовский файл свойств, соответственно


public abstract class AbstractTest {
...
static {
Properties config = new Properties();
InputStream defaultIs = AbstractTest.class.getResourceAsStream("/default.properties");

if (defaultIs == null) {
throw new IllegalStateException("Can't read config file");
}

try {
config.load(defaultIs);
} catch (IOException e) {
throw new IllegalStateException("Can't load configuration properties.", e);
} finally {
IOUtils.closeQuietly(defaultIs);
}
...

theDelay = config.getProperty("tests.delays.initialload");
...
}

}


В C# это тоже файлы ресурсов, схема использования таже, на msdn поищите resource file. Глобальная разница только в использовании статического конструктора, а не блока static как в Яве.

Сообщение отредактировал NLord: 18 марта 2008 - 12:55

  • 0

#14 Gnomik

Gnomik

    Активный участник

  • Members
  • PipPip
  • 76 сообщений
  • ФИО:Попов Федор Иванович

Отправлено 21 марта 2008 - 18:53

Обошел проблему циклом
while not sel.is_element_present(el):
try:
sel.wait_for_page_to_load(5000)
except:
pass
  • 0


Selenium 2.0: стартовый уровень
онлайн
Программирование на Java для тестировщиков
онлайн
Автоматизация функционального тестирования
онлайн
Selenium WebDriver: полное руководство
онлайн



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

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

Яндекс.Метрика
Реклама на портале