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

Техники локализации плавающих дефектов
онлайн, начало 19 апреля
Тестирование безопасности
онлайн, начало 21 апреля
Тестирование мобильных приложений
онлайн, начало 21 апреля
Автоматизатор мобильных приложений
онлайн, начало 21 апреля
Фотография

Selenium 2.30/31: падение после закрытия алерта


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

#1 Phelikss

Phelikss

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

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


Отправлено 28 февраля 2013 - 13:15

После выхода Selenium 2.30/31 тесты стали падать после выполнения строчки
assertTrue(closeAlertAndGetItsText(driver).matches("^Do you really want to delete these records[\\s\\S]$"));

появляется NoAlertPresentException

в detailMessage "No JavaScript modal dialog is open (WARNING: The server did not provide any stacktrace information)"

Какая еще информация может помочь?
  • 0

#2 Phelikss

Phelikss

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

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


Отправлено 28 февраля 2013 - 13:45

Если перехватывать исключение становится легче,
try {
assertTrue(closeAlertAndGetItsText(driver).matches("^Do you really want to delete these records[\\s\\S]$"));
} catch (NoAlertPresentException e) {}

но в Selenium 2.29 все работает и исключение не появляется, что изменилось?
  • 0

#3 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 853 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 28 февраля 2013 - 19:03

Ага, я понял -- это исправили баг :)
alert.getText() теперь выбрасывает исключение NoAlertPresentException, если alert уже закрыт (раньше так было реализовано только в python и .Net, теперь так же работает в Java и Ruby)
  • 2

Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium


#4 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 853 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 28 февраля 2013 - 19:07

Конструктивно, как исправить -- теперь метод должен выглядеть примерно так:

  private String closeAlertAndGetItsText() {
    try {
      Alert alert = driver.switchTo().alert();
      String alertText = alert.getText();
      if (acceptNextAlert) {
        alert.accept();
      } else {
        alert.dismiss();
      }
      return alertText;
    } finally {
      acceptNextAlert = true;
    }
  }

К сожалению, новые релизы Selenium IDE выходят реже, чем релизы WebDriver, поэтому пока код генерируется ошибочный. В следующей версии Selenium IDE это уже будет исправлено.
  • 6

Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium


#5 Phelikss

Phelikss

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

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


Отправлено 01 марта 2013 - 06:52

Спасибо, за быстрое решение проблемы.
  • 0

#6 prostooleg1

prostooleg1

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

  • Members
  • PipPip
  • 94 сообщений
  • Город:Москва


Отправлено 02 марта 2013 - 15:41

Ага, я понял -- это исправили баг :)
alert.getText() теперь выбрасывает исключение NoAlertPresentException, если alert уже закрыт (раньше так было реализовано только в python и .Net, теперь так же работает в Java и Ruby)


Спасибо вам, у меня были методы, которые вначале обрабатывали алерт а потом получали текст и с 2.30 версии тоже такие тесты стали падать.
  • 0

#7 evdubkov

evdubkov

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

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Дубков Евгений

Отправлено 23 июля 2013 - 09:01

а не подскажите как постоить условие, которое проверяет текст в сообщении, и в соответствии с ним нажимает кнопку?


if (driver.getPageSource().contains("Текст 1"))
{try { assertTrue(closeAlertAndGetItsText().matches("Текст 1"));
}catch (NoAlertPresentException e){}
TimeUnit.SECONDS.sleep(3);
}
else { if (driver.getPageSource().contains("Текст 2"))
{try { assertTrue(closeAlertAndGetItsText().matches("Текст 2"));
}catch (NoAlertPresentException e){}
TimeUnit.SECONDS.sleep(3);
}
}
этот метод не работает, какую функцию можно использовать, чтоб проверить текст в сообщении?
  • 0

#8 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 817 сообщений


Отправлено 23 июля 2013 - 09:47

а не подскажите как постоить условие, которое проверяет текст в сообщении, и в соответствии с ним нажимает кнопку?
этот метод не работает, какую функцию можно использовать, чтоб проверить текст в сообщении?

Может, попробовать контейн или эквиваил, вместо matches?
  • 0

#9 Petrov.Sergey

Petrov.Sergey

    Опытный участник

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 23 июля 2013 - 09:53

а не подскажите как постоить условие, которое проверяет текст в сообщении, и в соответствии с ним нажимает кнопку?


if (driver.getPageSource().contains("Текст 1"))
{try { assertTrue(closeAlertAndGetItsText().matches("Текст 1"));
}catch (NoAlertPresentException e){}
TimeUnit.SECONDS.sleep(3);
}
else { if (driver.getPageSource().contains("Текст 2"))
{try { assertTrue(closeAlertAndGetItsText().matches("Текст 2"));
}catch (NoAlertPresentException e){}
TimeUnit.SECONDS.sleep(3);
}
}
этот метод не работает, какую функцию можно использовать, чтоб проверить текст в сообщении?

Какое обилие фигурных скобок! Да ещё без форматирования! :nea:/> :acute:/>
А если попробовать вот так:
Alert alert = driver.switchTo().alert();
try {
	if (alert.getText().toLowerCase().contains("")) {
		//что надо сделать?
		alert.close();
	} else {
		//что надо сделать?
		alert.close();
	}
} catch (NoAlertPresentException e){
	TimeUnit.SECONDS.sleep(3); // а чего так много?
}

  • 1
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#10 evdubkov

evdubkov

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

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Дубков Евгений

Отправлено 23 июля 2013 - 12:08

Какое обилие фигурных скобок! Да ещё без форматирования!

Простите, пишу впервые

Alert alert = driver.switchTo().alert();
    try {
            if (alert.getText().toLowerCase().contains("Текст 1")) 
            {
                    
               assertTrue(closeAlertAndGetItsText().matches("Текст 1"));
                    
                   alert.dismiss();
            } 
                else { if (alert.getText().toLowerCase().contains("Текст 2")) 
                
                    { assertTrue(closeAlertAndGetItsText().matches("Текст 2"));
                 
                } alert.dismiss();
            }
          
    }catch (NoAlertPresentException e){}
Работает, спасибо большое)))
  • 0

#11 Petrov.Sergey

Petrov.Sergey

    Опытный участник

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 23 июля 2013 - 12:54

Простите, пишу впервые

Alert alert = driver.switchTo().alert();
    try {
            if (alert.getText().toLowerCase().contains("Текст 1")) 
            {
                    
               assertTrue(closeAlertAndGetItsText().matches("Текст 1"));
                    
                   alert.dismiss();
            } 
                else { if (alert.getText().toLowerCase().contains("Текст 2")) 
                
                    { assertTrue(closeAlertAndGetItsText().matches("Текст 2"));
                 
                } alert.dismiss();
            }
          
    }catch (NoAlertPresentException e){}
Работает, спасибо большое)))

Простите, хочу обратить Ваше пристальное внимание на метод ".toLowerCase()".
Есть подозрение, что Ваш код работает всё же не совсем так, как должен был бы.

И опять лишние фигурные скобки усложняют чтение.
1) Зачем Вам "else if" ? Конструкция "else if" подразумевает наличие простого else (что делать, если ни одно из предыдущих условий не сработало?)
2) Может ли алерт содержать другой текст, отличный от "Текст 1" и "Текст 2"?
3) Зачем матчить содержимое алерта по фразе, если условие IF уже пропускает только те алерты, которые содержат необходимую фразу?
  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).


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



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

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


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