九、修改util报中的WaitUtil.py文件,如:iframe弹框;根据实际情况判断是否使用
# encoding=utf-8
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 实现智能等待页面元素出现
class WaitUtil(object):
def __init__(self, driver):
self.locationTypeDict = {
"xpath": By.XPATH,
"id": By.ID,
"name": By.NAME,
"class_name": By.CLASS_NAME,
"tag_name": By.TAG_NAME,
"link_text": By.LINK_TEXT,
"partial_link_text": By.PARTIAL_LINK_TEXT
}
self.driver = driver
self.wait = WebDriverWait(self.driver, 10)
def presenceOfElementLocated(self, locatorMethod, locatorExpression, *args):
# 显示等待页面元素,元素不一定可见,存在则返回该页面元素对象
try:
if self.locationTypeDict.has_key(locatorMethod.lower()):
self.wait.until(
EC.presence_of_element_located((
self.locationTypeDict[locatorMethod.lower()],
locatorExpression)))
else:
raise TypeError('未找到定位方式,请确认定位方法是否正确')
except Exception as e:
raise e
def visibility_element_located(self, locationType, locatorExpression):
# 显示等待页面元素,元素可见,存在则返回该页面元素对象
try:
element = self.wait.until(EC.visibility_of_element_located
((self.locationTypeDict[locationType.lower()],
locatorExpression)))
return element
except Exception as e:
raise e
if __name__ == '__main__':
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("***")
waitUtil = WaitUtil(driver)
# waitUtil.frame_available_and_switch_to_it("id", "x-URS-iframe")
e = waitUtil.visibility_element_located("xpath", "//*[@id='ssoLoginMode']/li[2]/a")
e.click()
# time.sleep(5)
driver.quit()
十、KeyWordsFrameWork工程中新建一个action的python package,并在此包中新建一个PageAction.py文件,用于实现具体的页面动作,比如再输入框中输入数据,单击页面按钮等
# encoding=utf-8
from selenium import webdriver
from KeyWordsFrameWork.util.ObjectMap import getElement
from KeyWordsFrameWork.util.DirAndTime import *
from KeyWordsFrameWork.util.WaitUtil import WaitUtil
from selenium.webdriver.chrome.options import Options
import time
# 定义全局变量driver
driver = None
# 全局等待类实例对象
waitUtil = None
def open_browser(browsername='chrome', *args):
# 打开浏览器
global driver, waitUtil
try:
if browsername.lower() == 'chrome':
driver = webdriver.Chrome()
waitUtil = WaitUtil(driver)
except Exception as e:
raise e
def visit_url(url, *args):
# 访问某个网站
global driver
try:
driver.get(url)
except Exception as e:
raise e
def close_browser(*args):
# 关闭浏览器
global driver
try:
driver.quit()
except Exception as e:
raise e
def sleep(sleepSeconds, *args):
# 强制等待
try:
time.sleep(int(sleepSeconds))
except Exception as e:
raise e
def clear(locationType, locatorExpression, *args):
# 清楚输入框默认内容
global driver
try:
getElement(driver, locationType, locatorExpression).clear()
except Exception as e:
raise e
def input_string(locationType, locatorExpression, inputContent):
# 输入数据
global driver
try:
getElement(driver, locationType,
locatorExpression).send_keys(inputContent)
except Exception as e:
raise e
def click(locationType, locatorExpression, *args):
# 单击页面元素
global driver
try:
element = getElement(driver, locationType, locatorExpression)
# 防止点击时ElementClickInterceptedException异常,元素被遮挡;移动到这个元素后再点击
webdriver.ActionChains(driver).move_to_element(element).click(element).perform()
# if args is None:
# element.click()
# else:
# # 当元素无法可以定位到但被遮挡无法点击时,传入*args使用下面方法
# driver.execute_script("arguments[0].click();", element)
except Exception as e:
raise e
def assert_string_in_pagesource(assertString, *args):
# 断言页面源码是否存在某个关键字或关键字符串
global driver
try:
assert assertString in driver.page_source, \
'%s not found in page source!' % assertString
except AssertionError as e:
raise e
except Exception as e:
raise e
def assert_title(titleStr, *args):
# 断言页面标题是否存在给定的关键字符串
global driver
try:
assert titleStr in driver.title, \
'%s not found in title!' % titleStr
except AssertionError as e:
raise e
except Exception as e:
raise e
def get_title(*args):
# 获取页面标题
global driver
try:
return driver.title
except Exception as e:
raise e
def getPageSource(*args):
# 获取页面源码
global driver
try:
return driver.page_source
except Exception as e:
raise e
def maximzie_browser():
# 窗口最大化
global driver
try:
driver.maximize_window()
except Exception as e:
e
def capture_screen(*args):
# 截取屏幕图片
global driver
currTime = getCurrentTime()
picNameAndPath = str(createCurrentDateDir()) + '/' + str(currTime) + '.png'
try:
driver.get_screenshot_as_file(picNameAndPath.replace('/', '/'))
except Exception as e:
raise e
else:
return picNameAndPath
# 显示等待页面元素出现,但并不一定可见,存在则返回该页面元素对象
def waitPresenceOfElementLocated(locationType, locatorExpression, *args):
global waitUtil
try:
waitUtil.presenceOfElementLocated(locationType, locatorExpression)
except Exception as e:
raise e
# 显示等待页面元素出现,并且可见,存在则返回该页面元素对象
def waitVisibilityOfElementLocated(locationType, locatorExpression):
global waitUtil
try:
waitUtil.visibility_element_located(locationType, locatorExpression)
except Exception as e:
raise e
十一、修改testScripts包中的TestCreatBuilding.py
# encoding=utf-8
from KeyWordsFrameWork.action.PageAction import *
def TestCreatBuild():
# 启动chrome浏览器
open_browser('chrome')
maximzie_browser()
# 访问登录页
visit_url('https:****.com')
sleep(5)
assert_string_in_pagesource('***')
print('访问登录页成功')
# wait = WaitUtil(driver)
# 切换登录方式
click("xpath", "//*[@id='ssoLoginMode']/li[2]/a")
print('输入用户名')
input_string("xpath", "//*[@id='username']", '****')
print('输入登录密码')
input_string("xpath", "//*[@id='password']", '****')
print('登录')
click('xpath', "//*[@id='accountLogin']/button")
# 等待*秒,验证页面加载完成
sleep(5)
assert_string_in_pagesource("***")
print("登录成功")
# 切换到building页面
click('xpath', '//*[@id="app"]/div/section/aside/div/ul/li[3]/div/span/span')
sleep(1)
click('xpath', '//*[@id="/area$Menu"]/li[1]/a/span')
sleep(5)
assert_title("***")
print('进入***页面')
# 点击创建按钮
click('xpath', '//*[@id="root"]/div/section/section/section/'
'main/div/div[2]/div/div/div[3]/div/div[1]/div[1]/'
'button')
sleep(3)
# 选择地址
click('xpath', '//*[@id="root"]/div/section/section/section/main/'
'div/div[2]/div/div/div/form/div[1]/div[3]/div[1]/'
'div[1]/div/div[2]/div/span/span/span')
# 选择省市区
click('xpath', '//li[text()="北京"]')
click('xpath', '/html/body/div[2]/div/div/div/ul[2]/li')
click('xpath', '/html/body/div[2]/div/div/div/ul[3]/li[3]')
# 录入详细地址
input_string('xpath', '//*[@id="address"]', '****')
# 录入building名称
input_string('xpath', '//*[@id="name"]', '测试测试')
# 点击building定位
click('xpath', '//*[@id="buildAdressMarker"]/button')
sleep(3)
# 点击提交按钮
click('xpath', '//*[@id="root"]/div/section/section/section/main/'
'div/div[2]/div/div/div/form/div[5]/div/button[1]')
sleep(3)
# 关闭保存成功提示
click('xpath', '//button/span[text()="OK"]', False)
sleep(3)
# 校验数据新建成功
assert_string_in_pagesource('测试测试')
print('新建成功')
close_browser()
if __name__ == "__main__":
TestCreatBuild()