selenium 常用方法

# 编写人: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




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值