#!/usr/bin/python
-- coding: UTF-8 --
from selenium import webdriver
import unittest
import sys
import os
import datetime
import random
import time
from HTMLTestRunnerCN import HTMLTestRunner
reload(sys)
sys.setdefaultencoding(‘utf8’)
def login():
TEST_URL = “http://192.168.20.9:8080/CoreBusinessServer/login.html”
# ID = “0597”
# a = “A200” + “-” + ID + time.strftime(’%Y%m%d’, time.localtime(time.time()))
# # print(a)
driver = start(TEST_URL)
# driver.find_element(“xpath”, ‘’’//[@id=“zeus”]/div[1]/span[1]/div[2]/div/span[1]/input’’’).send_keys(str(a))
# driver.find_element(“xpath”, ‘’’//[@id=“zeus”]/div[1]/span[1]/div[2]/div/span[1]/img’’’).click()
# time.sleep(3)
return driver
def start(url):
“”"
启动浏览器
:param url: 测试地址
:param driver_name: 在启动时设置浏览器的类型
:return:
“”"
driver_name = “Chrome”
if driver_name == “Firefox”:
driver = webdriver.Firefox()
elif driver_name == “Ie”:
driver = webdriver.Ie()
else:
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get(url)
driver.maximize_window()
return driver
OVER_TIME = 5
TEST_URL = “http://192.168.20.9:8080/CoreBusinessServer/login.html”
index = 1
class Driver(object):
def new(cls, *args, **kw):
“”"
使用单例模式将类设置为运行时只有一个实例,在其他Python类中使用基类时,
可以创建多个对象,保证所有的对象都是基于一个浏览器
“”"
if not hasattr(cls, ‘_instance’):
orig = super(Driver, cls)
cls._instance = orig.new(cls, *args, **kw)
return cls._instance
def start(self, url= "http://192.168.20.9:8080/CoreBusinessServer/login.html", driver_name="Chrome"):
"""
启动浏览器
:param url: 测试地址
:param driver_name: 在启动时设置浏览器的类型
:return:
"""
if driver_name == "Firefox":
self.driver = webdriver.Firefox()
elif driver_name == "Ie":
self.driver = webdriver.Ie()
else:
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(5)
self.driver.get(url)
self.driver.maximize_window()
return self.driver
def get_url(self):
"""返回浏览器的地址"""
URL=self.driver.current_url
return URL
def get_title(self):
"""返回浏览器的标题"""
title=self.driver.title
return title
def close(self):
self.driver.close()
def quit(self):
u"""退出浏览器"""
self.driver.quit()
# 跳转页面
def Jumpwebpage(self, page, time_wait=3):
self.driver.get(self.Getwebpage(page))
self.driver.maximize_window()
if isinstance(time_wait, int):
time.sleep(time_wait)
def Getwebpage(self, page):
return R.ReadXmlData("%s.xml" % page, "page", 0, "url")
# 浏览器前进操作
def forward(self):
self.driver.forward()
# 浏览器后退操作
def back(self):
self.driver.back()
# 隐式等待
def wait(self, seconds):
self.driver.implicitly_wait(seconds)
# 保存图片
def get_windows_img(self):
"""
在这里我们把file_path这个参数写死,直接保存到我们项目根目录的一个文件夹.\Screenshots下
"""
# file_path = os.path.dirname(os.path.abspath('.')) + '/screenshots/'
file_path = os.getcwd() + '/screenshots/'
# print file_path
if os.path.exists(file_path):
pass
else:
os.mkdir(file_path)
rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
screen_name = file_path + rq + '.png'
try:
self.driver.get_screenshot_as_file(screen_name)
except NameError as e:
self.get_windows_img()
def Current_handel(self):
# 这时切换到新窗口
all_handles = self.driver.window_handles
for handle in all_handles:
self.driver.switch_to.window(handle)
# by_id = "id"
# by_xpath = "xpath"
# by_link_text = "link text"
# by_partial_text = "partial link text"
# by_name = "name"
# by_tag_name = "tag name"
# by_class_name = "class name"
# by_css_selector = "css selector"
def find_element(self, by, value):
"""
这里添加了一个OVER_TIME作为查找元素的超时次数,根据系统的实际情况设置OVER_TIME的大小
"""
for i in range(OVER_TIME):
try:
return self.driver.find_element(by=by, value=value)
except Exception, e:
print e
def find_elements(self, by, value):
"""与find_element一致"""
for i in range(OVER_TIME):
try:
return self.driver.find_elements(by=by, value=value)
except Exception, e:
print e
def find_display_elements(self, by, value):
"""
查找状态为displayed的元素集合,当查找一类元素时,
经常出现有些元素是不可见的情况,此函数屏蔽那些不可见的元素
"""
for i in range(OVER_TIME):
try:
elements = self.driver.find_elements(by=by, value=value)
num = elements.__len__()
except Exception, e:
print e
time.sleep(1)
if num >= 1:
break
display_element = []
# 将可见的元素放到列表中, 并返回
for j in range(num):
element = elements.__getitem__(j)
if element.is_displayed():
display_element.append(element)
return display_element
def is_element_present(self, By, Value):
"""判断元素是否存在"""
try:
self.driver.find_element(by=By, value=Value)
return True
except Exception, e:
print e
return False
# 输入内容方法
def Input(self, type, value, inputvalue):
if type == "xpath":
self.driver.find_element_by_xpath(value).send_keys(inputvalue)
elif type == "class_name":
self.driver.find_element_by_class_name(value).send_keys(inputvalue)
elif type == "id":
self.driver.find_element_by_id(value).send_keys(inputvalue)
elif type == "name":
self.driver.find_element_by_name(value).send_keys(inputvalue)
elif type == "link_text":
self.driver.find_element_by_link_text(value).send_keys(inputvalue)
elif type == "partial_link_text":
self.driver.find_element_by_partial_link_text(value).send_keys(inputvalue)
# 鼠标事件方法一
def Click(self, type, value):
if type == "xpath":
self.driver.find_element_by_xpath(value).click()
elif type == "class_name":
self.driver.find_element_by_class_name(value).click()
elif type == "id":
self.driver.find_element_by_id(value).click()
elif type == "name":
self.driver.find_element_by_name(value).click()
elif type == "link_text":
self.driver.find_element_by_link_text(value).click()
elif type == "partial_link_text":
self.driver.find_element_by_partial_link_text(value).click()
# 鼠标事件方法二
def Clear(self, type, value):
if type == "xpath":
self.driver.find_element_by_xpath(value).clear()
elif type == "id":
self.driver.find_element_by_id(value).clear()
elif type == "name":
self.driver.find_element_by_name(value).clear()
elif type == "link_text":
self.driver.find_element_by_link_text(value).clear()
elif type == "partial_link_text":
self.driver.find_element_by_partial_link_text(value).clear()
# 验证元素是否存在
def Check_element(self, type, value):
if type == "xpath":
self.driver.find_element_by_xpath(value)
elif type == "id":
self.driver.find_element_by_id(value)
elif type == "name":
self.driver.find_element_by_name(value)
elif type == "link_text":
self.driver.find_element_by_link_text(value)
elif type == "partial_link_text":
self.driver.find_element_by_partial_link_text(value)
# 获取子元素
def Select_child_elements(self, type, value1, value2):
if type == "xpath":
Select(self.driver.find_element_by_xpath(value1)).select_by_visible_text(value2)
elif type == "id":
Select(self.driver.find_element_by_id(value1)).select_by_visible_text(value2)
elif type == "name":
Select(self.driver.find_element_by_name(value1)).select_by_visible_text(value2)
elif type == "link_text":
Select(self.driver.find_element_by_link_text(value1)).select_by_visible_text(value2)
elif type == "partial_link_text":
Select(self.driver.find_element_by_partial_link_text(value1)).select_by_visible_text(value2)
# 获取输入框的值
def Get_attribute(self, type, value1, value2):
if type == "xpath":
Value = self.driver.find_element_by_xpath(value1).get_attribute(value2)
return Value
elif type == "name":
Value = self.driver.find_element_by_name(value1).get_attribute(value2)
return Value
elif type == "link_text":
Value = self.driver.find_element_by_link_text(value1).get_attribute(value2)
return Value
elif type == "class_name":
Value = self.driver.find_element_by_class_name(value1).get_attribute(value2)
return Value
elif type == "id":
Value = self.driver.find_element_by_id(value1).get_attribute(value2)
return Value
# 获取下拉框的文本的值
def Get_text(self, type, value):
if type == "xpath":
text = self.driver.find_element_by_xpath(value).text
return text
elif type == "name":
text = self.driver.find_element_by_name(value).text
return text
elif type == "link_text":
text = self.driver.find_element_by_link_text(value).text
return text
elif type == "class_name":
text = self.driver.find_element_by_class_name(value).text
return text
elif type == "id":
text = self.driver.find_element_by_id(value).text
return text
# 显性等待时间
def WebDriverWait(self, MaxTime, Mimtime, value):
element = self.driver.find_element(By.ID, value)
WebDriverWait(self.driver, MaxTime, Mimtime).until(EC.presence_of_element_located(element))
# # 鼠标移动点击机制
def Move_action(self, type, value):
if type == "xpath":
xm = self.driver.find_element_by_xpath(value)
webdriver.ActionChains(self.driver).click(xm).perform()
elif type == "id":
xm = self.driver.find_element_by_id(value)
webdriver.ActionChains(self.driver).click(xm).perform()
elif type == "name":
xm = self.driver.find_element_by_name(value)
webdriver.ActionChains(self.driver).click(xm).perform()
elif type == "link_text":
xm = self.driver.find_element_by_link_text(value)
webdriver.ActionChains(self.driver).click(xm).perform()
# 校验按钮是否为选中状态
def Is_selected(self, type, value):
if type == "id":
self.driver.find_element_by_id(value).is_selected()
elif type == "xpath":
self.driver.find_element_by_xpath(value).is_selected()
elif type == "class_name":
self.driver.find_element_by_class_name(value).is_selected()
elif type == "name":
self.driver.find_element_by_name(value).is_selected()
elif type == "link_text":
self.driver.find_element_by_link_text(value).is_selected()
def screenshot(self, index): #需要写这个方法才能实现截图
file_path = os.getcwd() + '/screenshots/'
# print file_path
if os.path.exists(file_path):
pass
else:
os.mkdir(file_path)
timestr = time.strftime('%Y%m%d',time.localtime(time.time())) #精确到秒会无法截图,要和htmltestrunner.py文件格式一致
img_name = timestr + '_' + str(index) + '.png' #图片以时间+第几次截图命名
self.driver.get_screenshot_as_file('%s%s' % (file_path,img_name)) #图片保存在定义路径中
return img_name