mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			150 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			5.9 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.
 | |
| 
 | |
| #!/usr/bin/python
 | |
| # coding: latin-1
 | |
| 
 | |
| from selenium.selenium import selenium
 | |
| from selenium.common.exceptions import NoSuchElementException
 | |
| from selenium import webdriver
 | |
| from selenium.webdriver.common.by import By
 | |
| from selenium.common.exceptions import WebDriverException
 | |
| from selenium.common.exceptions import TimeoutException
 | |
| from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0
 | |
| from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
 | |
| import re, sys, time, traceback
 | |
| 
 | |
| def try_except_decor(func):
 | |
|     def try_except(*args, **kwargs):
 | |
|         try:
 | |
|             return func(*args, **kwargs)
 | |
|         except WebDriverException as err:
 | |
|             exc_type, exc_value, exc_traceback = sys.exc_info()
 | |
|             print "WebDriver error. Function: {0}, error: {1}".format(func.func_code, err)
 | |
|             print repr(traceback.format_exception(exc_type, exc_value,exc_traceback))
 | |
|         except NoSuchElementException as err:
 | |
|             exc_type, exc_value, exc_traceback = sys.exc_info()
 | |
|             print "Element error. Function: {0}, error: {1}".format(func.func_code, err)
 | |
|             print repr(traceback.format_exception(exc_type, exc_value,exc_traceback))
 | |
|         except TimeoutException as err:
 | |
|             exc_type, exc_value, exc_traceback = sys.exc_info()
 | |
|             print "Timeout error. Function: {0}, error: {1}".format(func.func_code, err)
 | |
|             print repr(traceback.format_exception(exc_type, exc_value,exc_traceback))
 | |
| 
 | |
|     return try_except
 | |
| 
 | |
| class Shared(object):
 | |
| 
 | |
|     @staticmethod
 | |
|     @try_except_decor
 | |
|     def option_selection(browser, element_type, element_name, option_text, wait_element_type = '', wait_element_name = ''):
 | |
| 
 | |
|         ret = False
 | |
|         Shared.wait_for_element(browser, element_type, element_name)
 | |
|         if element_type == 'id':
 | |
|             ele = browser.find_element_by_id(element_name)
 | |
|         elif element_type == 'class_name':
 | |
|             ele = browser.find_element_by_class_name(element_name)
 | |
|         options = ele.find_elements_by_tag_name('option')
 | |
|         option_names = [option.text for option in options]
 | |
|         if option_text not in option_names:
 | |
|             return ret
 | |
| 
 | |
|         for option in options:
 | |
|             if option.text.find(option_text) > -1:
 | |
|                 option.click()
 | |
|                 ret = True
 | |
|                 time.sleep(1)
 | |
|                 break
 | |
| 
 | |
|         if len(wait_element_type) > 0 and len(wait_element_name) > 0:
 | |
|             Shared.wait_for_element(browser, wait_element_type, wait_element_name)
 | |
|         return ret
 | |
| 
 | |
|     @staticmethod
 | |
|     @try_except_decor
 | |
|     def flash_message(browser):
 | |
|         try:
 | |
|             ele1 = browser.find_element_by_id('flashMessageArea')
 | |
|         except NoSuchElementException:
 | |
|             ele1 = None
 | |
|         if ele1 != None:
 | |
|             ele2 = ele1.find_element_by_class_name('flash_message')
 | |
|             if ele2 != None and ele2.text != None and len(ele2.text) > 0:
 | |
|                 return ele2.text
 | |
|             else:
 | |
|                 return ''
 | |
|         else:
 | |
|             return ''
 | |
| 
 | |
|     @staticmethod
 | |
|     @try_except_decor
 | |
|     def string_selection(browser, key, value, index = 0):
 | |
|         element = browser.find_elements_by_id(key)[index]
 | |
|         element.clear()
 | |
|         element.send_keys(value)
 | |
| 
 | |
|     @staticmethod
 | |
|     def wait_until_title_text(browser, text, waittime = 30):
 | |
|         wait = WebDriverWait(browser, waittime)
 | |
|         wait.until(lambda browser: browser.title.lower().find(text.lower()) > -1)
 | |
| 
 | |
|     @staticmethod
 | |
|     def wait_until_find_id(browser, element_id, waittime = 10):
 | |
|         wait = WebDriverWait(browser, waittime)
 | |
|         wait.until(lambda browser: browser.find_element_by_id(element_id))
 | |
| 
 | |
|     @staticmethod
 | |
|     # the name should exist in the newer page, but not in older one
 | |
|     def wait_for_element(browser, element_type, name, waittime = 30):
 | |
|         wait = WebDriverWait(browser, waittime)
 | |
|         if element_type.lower() == 'id':
 | |
|             wait.until(EC.presence_of_element_located((By.ID, name)))
 | |
|         elif element_type.lower() == 'tag_name':
 | |
|             wait.until(EC.presence_of_element_located((By.TAG_NAME, name)))
 | |
|         elif element_type.lower() == 'class_name':
 | |
|             wait.until(EC.presence_of_element_located((By.CLASS_NAME, name)))
 | |
|         elif element_type.lower() == 'xpath':
 | |
|             wait.until(EC.presence_of_element_located((By.XPATH, name)))
 | |
|         elif element_type.lower() == 'link_text':
 | |
|             wait.until(EC.presence_of_element_located((By.LINK_TEXT, name)))
 | |
| 
 | |
|         #feed the string through directly
 | |
|         else:
 | |
|             wait.until(EC.presence_of_element_located(element_type, name))
 | |
| 
 | |
|         time.sleep(1)
 | |
| 
 | |
|     def playing_around(self):
 | |
|         from threading import Timer
 | |
|         t = Timer(20,self.wait_for_invisible)
 | |
|         t.start()
 | |
|  
 | |
|     @staticmethod
 | |
|     #wait until something disappears
 | |
|     def wait_for_invisible(browser, element_type, name, waittime=30):
 | |
|         wait = WebDriverWait(browser, waittime)
 | |
| 
 | |
|         # the code base uses underscores, but the real string doesn't have em.
 | |
|         final_type = re.sub('_',' ',element_type)
 | |
| 
 | |
|         wait.until(EC.invisibility_of_element_located((final_type, name)))
 | |
| 
 | |
|         #this method isn't as slick as I hoped :(
 | |
|         time.sleep(1)
 | |
| 
 |