# coding = utf-8
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
import time
import os
from selenium.webdriver.support.select import Select
from read_init import ReadIni
from selenium.webdriver.common.keys import Keys
from handle_json import handle_json
#类使用
class SelenimuDriver():
def __init__(self):
self.driver = self.open_browser()
def open_browser(self,browser='chrome'):
try:
if browser == 'chrome':
driver = webdriver.Chrome()
elif browser == 'firefox':
driver = webdriver.Firefox()
elif browser == 'ie':
driver = webdriver.Ie()
else:
driver = webdriver.Edge()
time.sleep(1)
return driver
except:
print("open browser fail!")
return None
def get_url(self,url):
if self.driver !=None:
self.driver.maximize_window()
if 'http://' in url:
self.driver.get(url)
else:
print("Your url have a problem!")
else:
print('can\'t get browser')
self.driver.quit()
def handle_windows(self,*args):
value = len(args)
if value == 1:
if args[0] == 'max':
self.driver.maximize_window()
elif args[0] == 'min':
self.driver.minimize_window()
elif args[0] == 'back':
self.driver.back()
elif args[0] == 'go':
self.driver.forward()
elif args[0] == 'refresh':
self.driver.refresh()
else:
print('don\'t have this operating')
elif value == 2:
self. driver.set_window_size(args[0],args[1])
else:
print('You Parameters is error!')
time.sleep(4)
self.driver.quit()
def assert_title(self,title_name = None):
'''
判断title是否正确
:param title_name:
:return: get_title()
'''
if title_name != None:
get_title = EC.title_contains(title_name)
return get_title(self.driver)
def open_url_is_true(self,url,title_name = None):
self.get_url(url)
return self.assert_title(title_name)
def close_driver(self):
self.driver.close()
def switch_windows(self,title_name=None):
'''
切换windows
:param title_name:
:return:
'''
handle_list = self.driver.window_handles
current_handle = self.driver.current_window_handle
for i in handle_list:
if i != current_handle:
time.sleep(2)
self.driver.switch_to.window(i)
if self.assert_title(title_name):
break
time.sleep(2)
self.driver.find_element_by_id('userId').send_keys('test')
time.sleep(2)
def element_isdisplay(self,element):
flag = element.is_displayed()
if flag == True:
return element
else:
return False
def get_element(self,info):
'''
获取元素element
:param by:
:param value:
:return:
'''
try:
by,value = self.get_local_element('username')
element = None
if by == 'id':
element = self.driver.find_element_by_id(value)
elif by == 'name':
element = self.driver.find_element_by_name(value)
elif by == 'css':
element == self.driver.find_element_by_css_selector(value)
elif by == 'class':
element == self.driver.fing_element_by_class_name(value)
else:
element == self.driver.find_element_by_xpath(value)
except:
print("定位方式:", by ,"定位值",value,"定位出现错误,没有定位成功")
return self.element_isdisplay(element)
def elements_isdisplay(self,elements):
flag_list = []
flags = elements.is_displayed()
for flag in flags:
if flag == False:
continue
else:
flag_list.append(flag)
return flag_list
def get_elements(self,info):
'''
获取元素element
:param by:
:param value:
:return:
'''
try:
elements = None
elements = []
by,value = self.get_local_element(info)
if by == 'id':
elements = self.driver.find_elements_by_id(value)
elif by == 'name':
elements = self.driver.find_elements_by_name(value)
elif by == 'css':
elements == self.driver.find_elements_by_css_selector(value)
elif by == 'class':
elements == self.driver.fing_elements_by_class_name(value)
else:
elements == self.driver.find_elements_by_xpath(value)
except:
print("定位方式:",by,"定位值",value,"定位出现错误,没有定位成功")
return self.elements_isdisplay(elements)
def get_list_element(self,info,index):
elements = self.get_elements(info)
if index > len(elements):
return None
return elements[index]
def get_level_element(self,info_level,node_info):
'''
:param by:
:param value:
:param node_by:
:param node_value:
:return:
'''
element = self.get_element(info_level)
node_by,node_value = node_info
if element == False:
return False
if node_by == 'id':
node_element = element.find_element_by_id(node_value)
elif node_by =='name':
node_element = element.find_element_by_name(node_value)
elif node_by =='css':
node_element = element.find_element_by_css_selector(node_value)
elif node_by =='class':
node_element = element.find_element_by_class_name(node_value)
else:
node_element = element.find_element_by_xpath(node_value)
return self.element_isdisplay(node_element)
def assert_element(self,element):
pass
def send_value(self,by,value,key):
'''
输入值
'''
element = self.get_element(by,value)
if element == False:
print("输入失败,定位元素不可编辑")
else:
if element != None:
element.send_keys(key)
else:
print("输入失败,定位元素没找打")
def click_element(self,info):
'''
点击元素
:param by:
:param value:
:return:
'''
element = self.get_element(info)
if element != False:
if element != None:
element.click()
else:
print("点击失败,定位元素没有找到")
else:
print("点击失败,元素不可见")
def check_box_isselected(self,info,check = None):
element = self.get_element(info)
if element != False:
flag = element.is_selected()
if flag == True:
if check != 'check':
self.click_element(info)
else:
if check == 'check':
self.click_element(info)
else:
print("元素不可见,没办法选择")
def get_local_element(self,info):
data = ReadIni.get_value(info)
data_info = data.split('>')
# print(data_info)
# by = data_info[0]
# local = data_info[1]
#[name,email]
return data_info
def get_selected(self,info,value_index,index=None):
'''
通过index获取我们seleced,然后选择我们selected
:param info:
:param value_index:
:param index:
:return:
'''
selected_element = None
if index != None:
selected_element = self.get_list_element(info,index)
else:
selected_element = self.get_element(info)
Select(selected_element).select_by_index(value_index)
def upload_file(self,file_name):
'''
上传文件
:param file_name:
:return:
'''
pykey = PyKeyboard()
# pykey.tap_key(pykey.shift_key)
pykey.type_string("D:\\download\\test.png")
time.sleep(2)
pykey.tap_key(pykey.enter_key)
def upload_file_function(self,file_name):
pass
# 先获取到上传文件的元素标签类型(input file) send_keys上传文件
def calendar(self,info,value):
'''
修改日历
:param info:
:param value:
:return:
'''
element = self.get_element(info)
try:
element.get_attribute('readonly')
self.js_excute_calendar(info)
except:
print("这个不是只读熟悉的日历")
element.clear()
self.send_value(info.value)
def moveto_element_mouse(self,info):
'''
移动鼠标
:param info:
:return:
'''
element = self.get_element(info)
ActionChains(self.driver).move_to_element(element).perform()
def refresh_f5(self):
'''
强制刷新
'''
ActionChains(self.driver).key_down(Keys.CONTROL).send_keys(Keys.F5).key_up(Keys.CONTROL).perform()
def switch_iframe(self,info,tag=None):
'''
切换iframe
:param info:
:param tag:
:return:
'''
if info != None:
iframe_element = self.get_element(info)
self.driver.switch_to.frame(iframe_element)
else:
self.driver.switch_to.default_content()
def switch_alert(self,info,value=None):
'''
系统级弹窗
:param info: 确认or取消
:param value: 是否需要输入值
:return:
'''
windows_alert = self.driver.switch_to.alert
if info == 'accept':
if value == None:
windows_alert.accept()
else:
windows_alert.send_keys(value)
windows_alert.accept()
windows_alert.accept()
else:
windows_alert.dismiss()
def scroll_get_element(self,list_info,str_info):
t = True
list_element = self.get_elements(list_info)
js = 'document.documentElement.scrollTop = 100000;'
while t:
for element in list_element:
title_name = element.find_element_by_tag_name('p').text
if title_name in str_info:
element.click()
t = False
self.driver.execute_script(js)
time.sleep(3)
def scroll_element(self,info):
js = 'document.documentElement.scrollTop = 1000;'
t = True
while t:
try:
self.get_element(info)
t = False
except:
self.driver.execute_script(js)
def get_cookie(self):
cookie = self.driver.get_cookies()
handle_json.write_data(cookie)
def set_cookie(self):
cookie = handle_json.get_data()
self.driver.delete_all_cookies()
time.sleep(1)
self.driver.add_cookie(cookie)
time.sleep(2)
def save_png(self):
now_time = time.strftime('%Y%m%d.%H.%M.%S')
self.driver.get_screenshot_as_file('%s.png' %now_time)
if __name__ == '__main__':
os.system("taskkill /f /im chromedriver.exe")
selfnium_driver = SelenimuDriver()
#*************************测试方法
# selfnium_driver.open_browser()
# print(selfnium_driver.open_url_is_true('http://www.imooc.com','程序员'))
# time.sleep(30)
# selfnium_driver.switch_windows('网站连接')