mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			176 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			176 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Licensed to the Apache Software Foundation (ASF) under one
 | |
| # or more contributor license agreements.  See the NOTICE file
 | |
| # distributed with this work for additional information
 | |
| # regarding copyright ownership.  The ASF licenses this file
 | |
| # to you under the Apache License, Version 2.0 (the
 | |
| # "License"); you may not use this file except in compliance
 | |
| # with the License.  You may obtain a copy of the License at
 | |
| #
 | |
| #   http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| # Unless required by applicable law or agreed to in writing,
 | |
| # software distributed under the License is distributed on an
 | |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | |
| # KIND, either express or implied.  See the License for the
 | |
| # specific language governing permissions and limitations
 | |
| # under the License.
 | |
| 
 | |
| from selenium import webdriver
 | |
| from selenium.common.exceptions import *
 | |
| from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
 | |
| from selenium.webdriver.common.action_chains import ActionChains as action
 | |
| from common import Global_Locators
 | |
| from cspages.cspage import CloudStackPage
 | |
| 
 | |
| from common.shared import *
 | |
| 
 | |
| class AccountsPage(CloudStackPage):
 | |
| 
 | |
|     def __init__(self, browser):
 | |
|         self.browser = browser
 | |
|         self.accounts = []
 | |
| 
 | |
|     @try_except_decor
 | |
|     def get_accounts(self):
 | |
|         rows = self.browser.find_elements_by_xpath("//div[@class='data-table']/table[@class='body']/tbody/tr")
 | |
|         for row in rows:
 | |
|             account = {}
 | |
|             columes = row.find_elements_by_tag_name('td')
 | |
|             account['Name'] =   columes[0].get_attribute('title').lower()
 | |
|             account['Role'] =   columes[1].get_attribute('title').lower()
 | |
|             account['Domain'] = columes[2].get_attribute('title').lower()
 | |
|             account['State'] =  columes[3].get_attribute('title').lower()
 | |
|             self.accounts.append(account)
 | |
| 
 | |
|     @try_except_decor
 | |
|     def account_exists(self, name):
 | |
|         if len(self.accounts) == 0:
 | |
|             self.get_accounts()
 | |
|         account = [acct for acct in self.accounts if acct['Name'] == name.lower()]
 | |
|         if len(account) > 0:
 | |
|             return True
 | |
|         else:
 | |
|             return False
 | |
| 
 | |
|     @try_except_decor
 | |
|     def add_account(self, username = "", password = "", email = "", firstname = "", lastname = "", domain = "", account = "", type = "", timezone = "", network_domain = ""):
 | |
|         # type = role
 | |
|         if len(username) == 0 or len(password) == 0 or len(email) == 0 or len(firstname) == 0 or len(lastname) == 0 or len(domain) == 0 or len(type) == 0:
 | |
|             return;
 | |
|         if type not in ('User', 'Admin'):
 | |
|             print "Account type must be either User or Admin."
 | |
|             return;
 | |
|         if self.account_exists(username):
 | |
|             return
 | |
| 
 | |
|         # click Add Account
 | |
|         ele = self.browser.find_element_by_xpath("//div[@class='toolbar']")
 | |
|         ele1 = ele.find_element_by_xpath("//div[3]/span")
 | |
|         ele1.click()
 | |
| 
 | |
|         Shared.wait_for_element(self.browser, 'id', 'label_username')
 | |
|         ele = self.browser.find_element_by_xpath("(//input[@name='username' and @type='text' and @id='label_username'])")
 | |
|         ele.send_keys(username)
 | |
|         ele = self.browser.find_element_by_xpath("(//input[@name='password' and @type='password' and @id='password'])")
 | |
|         ele.send_keys(password)
 | |
|         ele = self.browser.find_element_by_xpath("(//input[@name='password-confirm' and @type='password' and @id='label_confirm_password'])")
 | |
|         ele.send_keys(password)
 | |
|         ele = self.browser.find_element_by_xpath("(//input[@name='email' and @type='text' and @id='label_email'])")
 | |
|         ele.send_keys(email)
 | |
|         ele = self.browser.find_element_by_xpath("(//input[@name='firstname' and @type='text' and @id='label_first_name'])")
 | |
|         ele.send_keys(firstname)
 | |
|         ele = self.browser.find_element_by_xpath("(//input[@name='lastname' and @type='text' and @id='label_last_name'])")
 | |
|         ele.send_keys(lastname)
 | |
|         Shared.option_selection(self.browser, 'id', 'label_domain', 'ROOT')
 | |
|         if len(account) > 0:
 | |
|             ele = self.browser.find_element_by_xpath("(//input[@name='account' and @type='text' and @id='label_account'])")
 | |
|             ele.send_keys(account)
 | |
|         Shared.option_selection(self.browser, 'id', 'label_type', type)
 | |
|         Shared.option_selection(self.browser, 'id', 'label_timezone', timezone)
 | |
|         if len(network_domain) > 0:
 | |
|             ele = self.browser.find_element_by_xpath("(//input[@name='networkdomain' and @type='text' and @id='label_network_domain'])")
 | |
|             ele.send_keys(network_domain)
 | |
|         self.button_add()
 | |
| 
 | |
|         Shared.wait_for_element(self.browser, 'class_name', 'fixed-header')
 | |
| 
 | |
|     @try_except_decor
 | |
|     def select_account(self, username = "", domain = "", type = ""):
 | |
|         if len(username) == 0 or len(domain) == 0 or len(type) == 0:
 | |
|             return False;
 | |
|         if self.account_exists(username) == False:
 | |
|             print "The account does not exist"
 | |
|             return False
 | |
| 
 | |
|         # select the account
 | |
|         ele = self.browser.find_element_by_xpath("//div[@class='data-table']/div[@class='fixed-header']/table")
 | |
|         ele1 = ele.find_element_by_xpath("//tbody")
 | |
|         ele2 = ele1.find_elements_by_tag_name('tr')
 | |
|         for e in ele2:
 | |
|             ele3 = e.find_elements_by_tag_name('td')
 | |
|             # move mouse to quickview
 | |
|             if len(ele3) > 4 and \
 | |
|                 ele3[0].text == username and \
 | |
|                 ele3[1].text == type and \
 | |
|                 ele3[2].text == domain and \
 | |
|                 ele3[3].text == 'enabled':
 | |
|                 ele3[4].find_element_by_tag_name('span').click()
 | |
|                 Shared.wait_for_element(self.browser, 'class_name', 'details')
 | |
|                 # select account
 | |
|                 ele = self.browser.find_element_by_xpath("//div[@id='details-tab-details']/div[@class='details']/div/table/tbody/tr/td[@class='view-all']")
 | |
|                 ele1 = ele.find_element_by_tag_name('a').find_element_by_tag_name('span').click()
 | |
|                 break
 | |
| 
 | |
|         Shared.wait_for_element(self.browser, 'class_name', 'view-all')
 | |
| 
 | |
|     @try_except_decor
 | |
|     def delete_account(self, username = "", domain = "", type = ""):
 | |
|         if len(username) == 0 or len(domain) == 0 or len(type) == 0:
 | |
|             return False;
 | |
|         if self.account_exists(username) == False:
 | |
|             print "The account does not exist"
 | |
|             return False
 | |
| 
 | |
|         # find the account
 | |
|         ele = self.browser.find_element_by_xpath("//div[@class='data-table']/div[@class='fixed-header']/table")
 | |
|         ele1 = ele.find_element_by_xpath("//tbody")
 | |
|         ele2 = ele1.find_elements_by_tag_name('tr')
 | |
|         for e in ele2:
 | |
|             ele3 = e.find_elements_by_tag_name('td')
 | |
|             # move mouse to quickview
 | |
|             if len(ele3) > 4 and \
 | |
|                 ele3[0].text == username and \
 | |
|                 ele3[1].text == type and \
 | |
|                 ele3[2].text == domain and \
 | |
|                 ele3[3].text == 'enabled':
 | |
|                 ele3[4].find_element_by_tag_name('span').click()
 | |
|                 Shared.wait_for_element(self.browser, 'class_name', 'details')
 | |
|                 # delete account
 | |
|                 ele = self.browser.find_element_by_xpath("//div[@id='details-tab-details']/div[@class='details']/div/table/tbody/tr/td/div[@class='buttons']")
 | |
|                 ele1 = ele.find_element_by_xpath("//div[@class='action remove single text' and @title='Delete account']/span").click()
 | |
|                 Shared.wait_for_element(self.browser, 'class_name', 'ui-dialog-buttonset')
 | |
|                 self.button_yes()
 | |
|                 break
 | |
| 
 | |
|         Shared.wait_for_element(self.browser, 'class_name', 'fixed-header')
 | |
| 
 | |
|     @try_except_decor
 | |
|     def button_cancel(self):
 | |
|         ele = self.browser.find_element_by_xpath("/html/body/div[4]/div[2]/div/button[1]/span").click()
 | |
|         Shared.wait_for_element(self.browser, 'class_name', 'fixed-header')
 | |
| 
 | |
|     @try_except_decor
 | |
|     def button_add(self):
 | |
|         ele = self.browser.find_element_by_xpath("/html/body/div[4]/div[2]/div/button[2]/span").click()
 | |
|         Shared.wait_for_element(self.browser, 'class_name', 'fixed-header')
 | |
| 
 | |
|     @try_except_decor
 | |
|     def button_no(self):
 | |
|         ele = self.browser.find_element_by_xpath("/html/body/div[4]/div[10]/div/button[1]/span").click()
 | |
|         Shared.wait_for_element(self.browser, 'class_name', 'fixed-header')
 | |
| 
 | |
|     @try_except_decor
 | |
|     def button_yes(self):
 | |
|         ele = self.browser.find_element_by_xpath("/html/body/div[4]/div[10]/div/button[2]/span").click()
 | |
|         Shared.wait_for_element(self.browser, 'class_name', 'fixed-header')
 |