import os import sys import unittest sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../.."))) import base_test from selenium.common import exceptions from selenium.webdriver.support import wait class AlertsTest(base_test.WebDriverBaseTest): def setUp(self): self.wait = wait.WebDriverWait(self.driver, 5, ignored_exceptions = [exceptions.NoAlertPresentException]) self.driver.get(self.webserver.where_is('modal/res/alerts.html')) def tearDown(self): try: self.driver.switch_to_alert().dismiss() except exceptions.NoAlertPresentException: pass # Alerts def test_should_allow_user_to_accept_an_alert(self): self.driver.find_element_by_css_selector('#alert').click() alert = self.wait.until(lambda x: x.switch_to_alert()) alert.accept() self.driver.current_url def test_should_allow_user_to_accept_an_alert_with_no_text(self): self.driver.find_element_by_css_selector('#empty-alert').click() alert = self.wait.until(lambda x: x.switch_to_alert()) alert.accept() self.driver.current_url def test_should_allow_user_to_dismiss_an_alert(self): self.driver.find_element_by_css_selector('#alert').click() alert = self.wait.until(lambda x: x.switch_to_alert()) alert.dismiss() self.driver.current_url def test_should_allow_user_to_get_text_of_an_alert(self): self.driver.find_element_by_css_selector('#alert').click() alert = self.wait.until(lambda x: x.switch_to_alert()) value = alert.text alert.accept() self.assertEquals('cheese', value) def test_setting_the_value_of_an_alert_throws(self): self.driver.find_element_by_css_selector('#alert').click() alert = self.wait.until(lambda x: x.switch_to_alert()) with self.assertRaises(exceptions.ElementNotVisibleException): alert.send_keys('cheese') alert.accept() def test_alert_should_not_allow_additional_commands_if_dismissed(self): self.driver.find_element_by_css_selector('#alert').click() alert = self.wait.until(lambda x: x.switch_to_alert()) alert.accept() with self.assertRaises(exceptions.NoAlertPresentException): alert.text # Prompts def test_should_allow_user_to_accept_a_prompt(self): self.driver.find_element_by_css_selector('#prompt').click() alert = self.wait.until(lambda x: x.switch_to_alert()) alert.accept() self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == '') def test_should_allow_user_to_dismiss_a_prompt(self): self.driver.find_element_by_css_selector('#prompt').click() alert = self.wait.until(lambda x: x.switch_to_alert()) alert.dismiss() self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'null') def test_should_allow_user_to_set_the_value_of_a_prompt(self): self.driver.find_element_by_css_selector('#prompt').click() alert = self.wait.until(lambda x: x.switch_to_alert()) alert.send_keys('cheese') alert.accept() self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'cheese') def test_should_allow_user_to_get_text_of_a_prompt(self): self.driver.find_element_by_css_selector('#prompt').click() alert = self.wait.until(lambda x: x.switch_to_alert()) value = alert.text alert.accept() self.assertEquals('Enter something', value) def test_prompt_should_not_allow_additional_commands_if_dismissed(self): self.driver.find_element_by_css_selector('#prompt').click() alert = self.wait.until(lambda x: x.switch_to_alert()) alert.accept() with self.assertRaises(exceptions.NoAlertPresentException): alert.text def test_prompt_should_use_default_value_if_no_keys_sent(self): self.driver.find_element_by_css_selector('#prompt-with-default').click() alert = self.wait.until(lambda x: x.switch_to_alert()) alert.accept() self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'This is a default value') def test_prompt_should_have_null_value_if_dismissed(self): self.driver.find_element_by_css_selector('#prompt-with-default').click() alert = self.wait.until(lambda x: x.switch_to_alert()) alert.dismiss() self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'null') # Confirmations def test_should_allow_user_to_accept_a_confirm(self): self.driver.find_element_by_css_selector('#confirm').click() alert = self.wait.until(lambda x: x.switch_to_alert()) alert.accept() self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'true') def test_should_allow_user_to_dismiss_a_confirm(self): self.driver.find_element_by_css_selector('#confirm').click() alert = self.wait.until(lambda x: x.switch_to_alert()) alert.dismiss() self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'false') def test_setting_the_value_of_a_confirm_throws(self): self.driver.find_element_by_css_selector('#confirm').click() alert = self.wait.until(lambda x: x.switch_to_alert()) with self.assertRaises(exceptions.ElementNotVisibleException): alert.send_keys('cheese') alert.accept() def test_should_allow_user_to_get_text_of_a_confirm(self): self.driver.find_element_by_css_selector('#confirm').click() alert = self.wait.until(lambda x: x.switch_to_alert()) value = alert.text alert.accept() self.assertEquals('cheese', value) def test_confirm_should_not_allow_additional_commands_if_dismissed(self): self.driver.find_element_by_css_selector('#confirm').click() alert = self.wait.until(lambda x: x.switch_to_alert()) alert.accept() with self.assertRaises(exceptions.NoAlertPresentException): alert.text """ def test_switch_to_missing_alert_fails(self): with self.assertRaises(exceptions.NoAlertPresentException): self.driver.switch_to_alert() """ if __name__ == '__main__': unittest.main()