blob: 37f82ca1ba6200cf253372f5a8303202d5a2a154 [file] [log] [blame]
# 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"]')