John Bampton 8e538028b2
Enable Flake8 rule W391 (#6606)
Best practice is to have one blank line at the end of Python files.

Remove unneeded blank lines from the end of files
2022-11-13 11:00:07 +01:00

149 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)