| # Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import urlparse |
| |
| import belkinF5D8236_ap_configurator |
| from selenium.common.exceptions import WebDriverException |
| from selenium.common.exceptions import TimeoutException |
| |
| |
| class BelkinF9K1001APConfigurator( |
| belkinF5D8236_ap_configurator.BelkinF5D8236APConfigurator): |
| """Class to configure Belkin F9K1001v5 (01B) router.""" |
| |
| def __init__(self, ap_config): |
| super(BelkinF9K1001APConfigurator, self).__init__(ap_config) |
| self._dhcp_delay = 0 |
| |
| |
| def _security_alert(self, alert): |
| text = alert.text |
| if 'Selecting WEP Encryption will disable the WPS' in text: |
| alert.accept() |
| elif 'Selecting WPA/TKIP Encryption will disable the WPS' in text: |
| alert.accept() |
| elif 'Invalid character' in text: |
| alert.accept() |
| elif 'It is recommended to use WPA/WPA2 when WPS is enabled' in text: |
| alert.accept() |
| elif 'Are you sure to configure WPS in Open security?' in text: |
| alert.accept() |
| else: |
| alert.accept() |
| raise RuntimeError('Unhandeled modal dialog. %s' % text) |
| |
| |
| def navigate_to_page(self, page_number): |
| """ |
| Navigates to the page corresponding to the given page number. |
| |
| This method performs the translation between a page number and a url to |
| load. This is used internally by apply_settings. |
| |
| @param page_number: page number of the page to load |
| |
| """ |
| page_title='Network Name' |
| element_xpath='//input[@name="ssid"]' |
| page_url = None |
| |
| if page_number == 1: |
| page_url = urlparse.urljoin(self.admin_interface_url, |
| 'wifi_id.stm') |
| elif page_number == 2: |
| page_url = urlparse.urljoin(self.admin_interface_url, |
| 'wifi_sc.stm') |
| page_title='Security' |
| element_xpath=self.security_popup |
| else: |
| raise RuntimeError('Invalid page number passed. Number of pages ' |
| '%d, page value sent was %d' % |
| (self.get_number_of_pages(), page_number)) |
| try: |
| self.get_url(page_url, page_title=page_title, |
| element_xpath=element_xpath) |
| except WebDriverException, e: |
| if 'Welcome to your Belkin router dashboard!' in self.driver.title: |
| self._login_to_dashboard(element_xpath) |
| self.wait_for_object_by_xpath(element_xpath) |
| |
| |
| def _login_to_dashboard(self, obj_xpath): |
| """ |
| Login and wait for the object with obj_xpath to show up. |
| |
| @param obj_xpath: The object that should be searched to confirm that we |
| logged in. |
| |
| """ |
| self.set_content_of_text_field_by_id('password', 'p1210Password', |
| abort_check=True) |
| self.click_button_by_id('p1210a005') |
| self.wait_for_object_by_xpath(obj_xpath, wait_time=10) |
| |
| |
| def save_page(self, page_number): |
| """ |
| Save changes. |
| |
| @param page_number: the page number to save as an integer. |
| |
| """ |
| self.set_wait_time(30) |
| if page_number == 1: |
| xpath = '//a[text()="Save" and @href="#save" and @id="dnsapply"]' |
| self.click_button_by_xpath(xpath, |
| alert_handler=self._security_alert) |
| elif page_number == 2: |
| button = self.driver.find_element_by_link_text('Save') |
| button.click() |
| self._handle_alert(None, alert_handler=self._security_alert) |
| dashboard_title = 'Welcome to your Belkin router dashboard!' |
| network_title = 'Network Name' |
| security_title = 'Security' |
| try: |
| # This is a dummy wait. We just need to make sure that we give the |
| # router enough time to save the changes. |
| self.wait.until(lambda _: dashboard_title in self.driver.title) |
| except TimeoutException, e: |
| if not self.driver.title in [dashboard_title, network_title, |
| security_title]: |
| raise RuntimeError('Error while saving the page. ' + str(e)) |
| finally: |
| self.restore_default_wait_time() |
| |
| |
| def set_security_wep(self, key_value, authentication): |
| self.add_item_to_command_list(self._set_security_wep, |
| (key_value, authentication), 2, 1000) |
| |
| |
| def _set_security_wep(self, key_value, authentication): |
| text_field = '//input[@name="passphrase"]' |
| try: |
| self.select_item_from_popup_by_xpath('64bit WEP', |
| self.security_popup, wait_for_xpath=text_field, |
| alert_handler=self._security_alert) |
| except WebDriverException, e: |
| message = str(e) |
| if message.find('An open modal dialog blocked') == -1: |
| raise RuntimeError(message) |
| self._security_alert(self.driver.switch_to_alert()) |
| self.set_content_of_text_field_by_xpath(key_value, text_field, |
| abort_check=True) |
| self.click_button_by_id('btngen', alert_handler=self._security_alert) |