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

Фотография

Тест проходит успешно, но описанные действия для страницы не выполняют


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

#1 lyasya

lyasya

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

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

Отправлено 12 августа 2011 - 14:21

Мне необходимо протестировать Checkout steps.
При переходе с шага на шаг линка остается неизменяемая, просто осуществляется переход на следующий таб.
На первом табе нажимается кнопка Next, а на втором табе кнопка Next уже не хочет нажиматься, радиобаттоны не хотят селектиться.
Хотя при проверке Selenium.IsElementPresent(); удачно проходит и радиобатон и кнопка. Селениум видит элементы и по чистому айди, и по икс-пасу.
Но действия по клику не осуществляется.

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

Как с этим бороться?
  • 0

#2 Vitalik_V

Vitalik_V

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

  • Members
  • PipPip
  • 149 сообщений
  • ФИО:Виталий
  • Город:Харьков

Отправлено 12 августа 2011 - 15:16

Мне необходимо протестировать Checkout steps.
При переходе с шага на шаг линка остается неизменяемая, просто осуществляется переход на следующий таб.
На первом табе нажимается кнопка Next, а на втором табе кнопка Next уже не хочет нажиматься, радиобаттоны не хотят селектиться.
Хотя при проверке Selenium.IsElementPresent(); удачно проходит и радиобатон и кнопка. Селениум видит элементы и по чистому айди, и по икс-пасу.
Но действия по клику не осуществляется.

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

Как с этим бороться?

А локаторы для элементов на табах разные? Возможно нужно еще смотреть isVisible параметр для нужных элементов.
  • 1

#3 ekulgavaya

ekulgavaya

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

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Елена
  • Город:Minsk, Belarus


Отправлено 12 августа 2011 - 15:21

Подозреваю, что все кнопки Next имеют одинаковы айди, а поскольку страница не перезагружается, то элементы просто перекрываются друг другом визуально. Селениум естественно такое не видит, поэтому жмет на первую кнопку. То есть кнопка Next продолжает нажиматься на первом табе. Попробуйте в локаторе указать таб, на котором лежит кнопка. Примерно вот так:
"//div[@id='tabStep2']//a[@id='btnNext']"
или
"//div[@id='tabStep2']//input[@id='btnNext']"
Хотя подозреваю, что кнопка все-таки это тег <a>
  • 1
In God we trust, the rest we test.

#4 lyasya

lyasya

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

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

Отправлено 15 августа 2011 - 06:03

А локаторы для элементов на табах разные? Возможно нужно еще смотреть isVisible параметр для нужных элементов.

кнопка Nezt имеет одинаковый локатор на всех табах. Но, к примеру, на первом табе присутсвует выпадающий список, на втором - радиобатоны. Разумеется локаторы у них разные, но на втором табе радиобатон не выбирается.
К кнопке Next на каждом табе обращаюсь по-разному: на первом - по айди, на втором - по иск-пассу и т.п.

Подозреваю, что все кнопки Next имеют одинаковы айди, а поскольку страница не перезагружается, то элементы просто перекрываются друг другом визуально.

да, кнопки Next имеют одинаковый айди. Чуть выше уже описала, что обращаюсь к кнопке каждый раз разным способом.

Попробуйте в локаторе указать таб, на котором лежит кнопка.

Спасибо, буду пробовать.
  • 0

#5 lyasya

lyasya

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

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

Отправлено 15 августа 2011 - 06:21

На первом табе обращаюсь к кнопке:
//li[@id='opc-billing']//button[@class='button green-button']

На втором:
//li[@id='opc-shipping']//button[@class='button green-button']

проверка наличия этих кнопок функцией IsElementPresent возвращает true, но опять же таки - на втором шаге действия не производятся. Обновлять страницу нельзя, потому что идет возврат на первый таб.

Пробовала устанавливать фокус на кнопку и нажимать - эффекта ноль.

Что делать? :(
  • 0

#6 ekulgavaya

ekulgavaya

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

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Елена
  • Город:Minsk, Belarus


Отправлено 15 августа 2011 - 08:05

Может конечно глупый вопрос, но вы точно дожидаетесь появления этих кнопок?
Ведь они априори есть на странице, и isElementPresent всегда вернет true. Но судя по всему после нажатия кнопки Next у вас идет обработка ajax запроса.
Попробуйте сначала поставить банальную паузу, и если это сработает продумать, как именно дождаться кнопки. (Возможно, как говорил Vitalik_V , дождаться например свойства Visible=true.)
  • 1
In God we trust, the rest we test.

#7 lyasya

lyasya

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

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

Отправлено 15 августа 2011 - 12:02

сделала проверку IsVisible для Next button.
Failed.
А как дождаться появления кнопки? Какой метод использовать?
WaitForPageToLoad() не подходит, потому что по сути страница не обновляется, тест фэйлится.
  • 0

#8 horhe

horhe

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

  • Members
  • PipPip
  • 100 сообщений
  • ФИО:Юрко
  • Город:Kraków

Отправлено 15 августа 2011 - 12:25

в IDE он называется waitForElementPresent для RC зависит от языка, но смысл общий в том, что это цикл проверяющий наличие элемента на странице один раз в секунду, указанное количество раз. на Java это выглядит примерно так

public void waitForElement(java.lang.String elementName) throws InterruptedException {
        for (int second = 0; ; second++) {
            if (second >= 30) fail(" Element \"" + elementName + "\" isn't present");
            try {
                if (selenium.isElementPresent(elementName)) break;
            } catch (Exception e) {
            }
            Thread.sleep(1000);
        }
    }

  • 1
Piobaireachd isn't mysterious, difficult or hard - it's just music...

#9 ekulgavaya

ekulgavaya

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

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Елена
  • Город:Minsk, Belarus


Отправлено 15 августа 2011 - 12:59

на Java это выглядит примерно так

public void waitForElement(java.lang.String elementName) throws InterruptedException {
        for (int second = 0; ; second++) {
            if (second >= 30) fail(" Element \"" + elementName + "\" isn't present");
            try {
                if (selenium.isElementPresent(elementName)) break;
            } catch (Exception e) {
            }
            Thread.sleep(1000);
        }
    }

Я бы рекомендовала несколько переопределить этот метод, поскольку ожидание указанных здесь 30-ти секунд может по факту занять несколько минут ( к примеру в ИЕ, с локаторами на Xpath.) Например вот так

	public void waitForElementPresent(String locator, int time) throws InterruptedException{
		long start = System.currentTimeMillis();
		while (System.currentTimeMillis() < start + time) {
			if ((selenium.isElementPresent(locator)))
				return;
			Thread.sleep(1000);
		}
		throw new AssertionError("The element " + locator + " still isn't present");
	}
Такой метод позволит вам контролировать время выполнения теста, поскольку ждать элемента вы будете ровно столько, сколько укажете в параметре time.
  • 1
In God we trust, the rest we test.


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

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