# 编写人:xgc
# 编写时间: 2022--02--13 20:38
# 关键字驱动:把长期频繁使用的一些行为(功能)进行封装,从而达到简化和重复使用的目的;
#(个人更喜欢称之为模块测试)实现逻辑代码和测试代码相分离、测试数据参数化
#使用Excel的目的是实现数据和代码相分离,将测试数据都放在excel中,再在代码中读取,在执行用例
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as exp
from selenium.webdriver.support.wait import WebDriverWait
import time
from selenium.webdriver.support.select import Select #处理下拉列表的模块
from selenium.webdriver.common.action_chains import ActionChains #鼠标的处理
#创建关键字类,在类中封装常用的行为方法
class Key:
#初始化方法
def __init__(self,text):
#这里的driver就是全局变量,范围属于这个类
self.driver=self.open_browser(text)
#获取当前页面的title
def title(self):
return self.driver.title
#打开浏览器
def open_browser(self,text):
"""
#这是一种写法
if text == 'Chrome':
self.driver=webdriver.Chrome()
elif text == 'Firefox':
self.driver=webdriver.Firefox()
elif text == 'Ie':
self.driver=webdriver.Ie()
else:
print('没有匹配的浏览器')
"""
#第二种写法
try:
#使用反射机制,等同于webdriver.Chrome
driver=getattr(webdriver,text)()
except:
driver=webdriver.Chrome()
#返回浏览器对象
return driver
#访问URL
def url(self,text):
self.driver.get(text)
#最大化窗口
self.driver.maximize_window()
#定位元素
def locat_element(self,loca_way,loca_value):
#返回定位到的元素
return self.driver.find_element(self.located_way(loca_way),loca_value)
#输入操作,输入文本并且返回定位到的元素对象
def input(self,loca_way,loca_value,text):
ele=self.locat_element(loca_way,loca_value)
ele.send_keys(text)
#点击某个元素操作
def click(self,loca_way,loca_value):
#定位元素并点击
self.driver.find_element(self.located_way(loca_way),loca_value).click()
#强制等待
def sleep(self,text):
time.sleep(text)
#隐式等待:等待页面元素加载完成后再进行下一步操作
def implicit_wait(self,text):
self.driver.implicitly_wait(text)
#显示等待
def explicit_wait(self,loca_way,loca_value,text):
#需要显示等待的元素后在操作
locat=(self.located_way(loca_way),loca_value)
#在最长时间内反复检查指定的条件是否满足,知道满足条件为止或超时异常
el=WebDriverWait(self.driver,text).until(exp.presence_of_element_located((locat)))
#滚动页面到指定元素
def scroll_loca(self,loca_way,loca_value):
locater=self.driver.find_element(self.located_way(loca_way),loca_value)
self.driver.execute_script('arguments[0].scrollIntoView();',locater)
return locater
#切换句柄到当前活动页
def switch_to_active_page(self):
#方法1
handles=self.driver.window_handles
self.driver.switch_to.window(handles[len(handles)-1])
#方法2
# current_handle=self.driver.current_window_handle
# for item in self.driver.window_handles: #handles是str的列表
# if item != current_handle:
# self.driver.switch_to.window(item)
#将句柄回退到上一步:回退到当前句柄的前几步
def handle_back(self,text):
#获取所有的句柄
handles_list=self.driver.window_handles
#切换到浏览器中第几个tab页
self.driver.switch_to.window(handles_list[text-1])
print(f'已经回退到第{text}页')
#切换iframe:通过id和name来定位
def goto_iframe(self,text):
self.driver.switch_to.frame(text)
#回到默认架构(退出iframe)
def goto_default_frame(self):
self.driver.switch_to.default_content()
#处理下拉列表:
def select_choose_option(self,loca_way,loca_value,text):
#使用seleium中的Select类处理下拉列表
select=Select(self.driver.find_element(self.located_way(loca_way),loca_value))
#根据列表选项内容选择,除此之外还可以根据index选择
select.select_by_value(text)
#处理alert弹框,提示弹框,点击确认和取消都一样
def deal_alert(self):
#accept()相当于确认按键
self.driver.switch_to.alert.accept()
#弹出框,点击取消
#self.driver.switch_to.alert.dismiss()
#获取弹框的文本内容
#text=self.driver.switch_to.alert.text
#鼠标的操作,ActionChains中提供了相关的操作
#悬停操作:鼠标在指定元素上悬停
def mouse_hover_onElement(self,loca_way,loca_value):
#定位需要悬停的元素
tag_ele=self.driver.find_element(self.located_way(loca_way),loca_value)
#实例化ActionChains对象并移动到目标元素,perform()表示执行鼠标操作
ActionChains(self.driver).move_to_element(tag_ele).perform()
#多行文本框testarea的输入操作
def textarea_inpt(self,loca_value,text):
self.driver.execute_script(f'var area=document.getElementById({loca_value});area.value={text}')
#屏幕截图
def scrollshot_pic(self,text):
#将截图保存到如下路径
self.driver.get_screenshot_as_file('F:\\autoTest\\keyDriver_Excel\\save_pic.'+text)
#关闭当前句柄页
def quit(self):
self.driver.quit()
#清空输入框的值
def clear_content(self,loca_way,loca_value):
self.locat_element(loca_way,loca_value).clear()
#定位方式
def located_way(self,loca_way):
if loca_way == "ID":
return By.ID
elif loca_way == "XPATH":
return By.XPATH
elif loca_way == "NAME":
return By.NAME
elif loca_way == "TAG_NAME":
return By.TAG_NAME
elif loca_way == "LINK_TEXT":
return By.LINK_TEXT
elif loca_way == "PARTIAL_LINK_TEXT":
return By.PARTIAL_LINK_TEXT
elif loca_way == "CLASS_NAME":
return By.CLASS_NAME
else:
return By.CSS_SELECTOR
selenium 常用方法
于 2022-02-23 22:02:10 首次发布