Selenium
框架
Python+Selenium+Pytest+Mysql+openpyxl
配置相关
import pathlib
class Config():
# 当前的文件路径
current_path = pathlib.Path(__file__).absolute()
# root
root = current_path.parent.parent
# 驱动路径
driver_path = root / "drivers/chromedriver.exe" # 谷歌浏览器驱动位置
# 默认等待时间
default_timeout = 5
# 域名
host = "测试网站"
# 默认加载策略
load_strategy = "eager"
# 用户名
user_mobile = "手机号"
# 密码
passwd = "密码"
# Database
database = dict(host="数据库IP地址",
port=端口号,
user="用户名",
password="密码",
database="数据库")
测试夹具-驱动封装
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from config.setting import Config
@pytest.fixture()
def driver():
driver_path = Config.driver_path # 浏览器驱动地址
option = Options()
option.page_load_strategy = Config.load_strategy # 页面加载策略
d = webdriver.Chrome(executable_path=driver_path, options=option)
d.implicitly_wait(Config.default_timeout)
yield d
time.sleep(3)
d.quit()
Mysql数据库封装
import pymysql
from pymysql.cursors import DictCursor
from config.setting import Config
class DB:
def __init__(self):
self.conn = pymysql.connect(**Config.database)
def query_one(self, sql):
cursor = self.conn.cursor(cursor=DictCursor)
cursor.execute(sql)
result = cursor.fetchone()
cursor.close()
return result
def query_all(self, sql):
cursor = self.conn.cursor(cursor=DictCursor)
cursor.execute(sql)
result = cursor.fetchall()
cursor.close()
return result
def close(self):
"""关闭数据库"""
self.conn.close()
openpyxl封装
"""专门去操作Excel表格的"""
import openpyxl
def read_excel(file, sheet_name):
workbook = openpyxl.load_workbook(file)
sheet = workbook[sheet_name]
items = list(sheet.values)
title = items[0]
new_list = [dict(zip(title, item)) for item in items[1:]]
return new_list
Selenium常用操作方法
from selenium.webdriver import Chrome, ActionChains, Keys
class BasePage(object):
def __init__(self, driver: Chrome):
self.driver = driver
def goto(self, url):
"""访问URL"""
self.driver.get(url)
def click(self, locator):
"""封装浏览器的点击操作"""
el = self.driver.find_element(*locator)
try:
el.click()
except:
ActionChains(self.driver).click(el).perform()
def send_keys(self, words, locator=None):
# 输入
if locator:
el = self.driver.find_element(*locator)
# 相当于 ActionChains 里面的 send_keys_to_element
# 先点击元素el,再然后在输入内容,先会有光标的聚焦
el.send_keys(words)
return
else:
ActionChains(self.driver).send_keys(words).perform()
def assert_text_equal(self, locator, expected):
"""断言元素的文本"""
el = self.driver.find_element(*locator)
assert el.text == expected
# 把所有的浏览器常用操作都封装成现成的方法直接使用
def double_click(self, locator):
"""双击"""
el = self.driver.find_element(*locator)
ActionChains(self.driver).double_click(el).perform()
def drag_and_drop(self, locator1, locator2):
"""鼠标拖动"""
el1 = self.driver.find_element(*locator1)
el2 = self.driver.find_element(*locator2)
ActionChains(self.driver).drag_and_drop(el1, el2).perform()
def press_enter(self):
"""回车"""
ActionChains(self.driver).send_keys(Keys.ENTER).perform()
def copy(self):
"""复制"""
action = ActionChains(self.driver)
action.key_down(Keys.CONTROL).send_keys("c").key_up(Keys.CONTROL).perform()
def paste(self):
"""粘贴"""
action = ActionChains(self.driver)
action.key_down(Keys.CONTROL).send_keys("v").key_up(Keys.CONTROL).perform()
def scroll_to_bottom(self):
"""滚动到窗口底部"""
script = 'window.scrollTo(0, document.body.scrollHeight)'
self.driver.execute_script(script)
def switch_to_iframe(self, locator):
"""切换iframe"""
self.driver.switch_to.frame(*locator)
标签:el,基础,self,driver,cursor,locator,def,selenium
From: https://www.cnblogs.com/HollowPan/p/17627391.html