# Copyright (c) 2014 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 ap_spec import edimax_ap_configurator class Edimax6475ndAPConfigurator( edimax_ap_configurator.EdimaxAPConfigurator): """Derived class to control the Edimax BR-6475ND AP.""" def navigate_to_page(self, page_number): """Navigate to the required page. @param page_number: The page number to navigate to. """ if page_number != 1 and page_number != 2: raise RuntimeError('Invalid page number passed. Number of pages is' '%d, page value sent was %d' % (self.get_number_of_pages(), page_number)) page_url = self.admin_interface_url self.get_url(page_url, page_title='EDIMAX Technology') frame = self.driver.find_element_by_xpath('//frame[@name="mainFrame"]') self.driver.switch_to_frame(frame) main_tabs = self.driver.find_elements_by_css_selector('div') main_tabs[2].click() sub_tabs = self.driver.find_elements_by_xpath( '//span[@class="style11"]') if self.current_band == ap_spec.BAND_2GHZ: sub_tabs[2].click() else: sub_tabs[3].click() if page_number == 1: # Open the general settings page. self.click_button_by_xpath('//input[@onclick="c_fun(0)" and ' '@name="sys"]') self.wait_for_object_by_xpath('//select[@name="band"]') else: # Open the security settings page. self.click_button_by_xpath('//input[@onclick="c_fun(1)" and ' '@name="sys"]') self.wait_for_object_by_xpath('//select[@name="method"]') def get_supported_bands(self): return [{'band': ap_spec.BAND_2GHZ, 'channels': range(1, 11)}, {'band': ap_spec.BAND_5GHZ, 'channels': [36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 136, 140, 149, 153, 157, 161, 165]}] def set_band(self, band): if band == ap_spec.BAND_5GHZ: self.current_band = ap_spec.BAND_5GHZ elif band == ap_spec.BAND_2GHZ: self.current_band = ap_spec.BAND_2GHZ else: raise RuntimeError('Invalid band sent %s' % band) def get_supported_modes(self): return [{'band': ap_spec.BAND_2GHZ, 'modes': [ap_spec.MODE_B, ap_spec.MODE_G, ap_spec.MODE_N, ap_spec.MODE_B | ap_spec.MODE_G, ap_spec.MODE_B | ap_spec.MODE_G | ap_spec.MODE_N]}, {'band': ap_spec.BAND_5GHZ, 'modes': [ap_spec.MODE_A, ap_spec.MODE_N, ap_spec.MODE_A | ap_spec.MODE_N]}] def _set_mode(self, mode, band=None): # Create the mode to popup item mapping mode_mapping_2ghz = {ap_spec.MODE_B | ap_spec.MODE_G | ap_spec.MODE_N: '2.4 GHz (B+G+N)', ap_spec.MODE_N: '2.4 GHz (N)', ap_spec.MODE_B: '2.4 GHz (B)', ap_spec.MODE_G: '2.4 GHz (G)', ap_spec.MODE_B | ap_spec.MODE_G: '2.4 GHz (B+G)'} mode_mapping_5ghz = {ap_spec.MODE_A: '5 GHz (A)', ap_spec.MODE_N: '5 GHz (N)', ap_spec.MODE_A | ap_spec.MODE_N: '5 GHz (A+N)'} mode_name = '' if mode in mode_mapping_2ghz.keys() or mode in mode_mapping_5ghz.keys(): if self.current_band == ap_spec.BAND_2GHZ: mode_name = mode_mapping_2ghz[mode] else: mode_name = mode_mapping_5ghz[mode] else: raise RuntimeError('The mode selected %d is not supported by router' ' %s.', hex(mode), self.name) xpath = '//select[@name="band"]' self.select_item_from_popup_by_xpath(mode_name, xpath) def _set_channel(self, channel): position = self._get_channel_popup_position(channel) channel_choices_2ghz = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'] channel_choices_5ghz = [ '36', '40', '44', '48', '52', '56', '60', '64', '100', '104', '108', '136', '140', '149', '153', '157', '161', '165'] if self.current_band == ap_spec.BAND_2GHZ: self.select_item_from_popup_by_xpath(channel_choices_2ghz[position], '//select[@name="chan"]') else: self.select_item_from_popup_by_xpath(channel_choices_5ghz[position], '//select[@name="chan"]')