关键字驱动知识点

关键字驱动代码
代码结构

浏览器配置options
from time import sleep
from selenium import webdriver
class Options:
def options_conf(self):
# 创建options对象:配置浏览器的设置
options = webdriver.ChromeOptions()
# 去掉默认的自动化提示:不去掉一般不会有任何影响,但是在特殊情况下,黄条可能会遮挡到页面的内容显示
options.add_experimental_option('excludeSwitches', ['enable-automation'])
# 窗体最大化
options.add_argument('start-maximized')
# 加载本地缓存,让浏览器变成一个有缓存的模式
# prefs = {}
# prefs["credentials_enable_service"] = False
# prefs["profile.password_manager_enabled"] = False
# options.add_experimental_option("prefs", prefs)
# 无头模式:Headless模式,无界面运行,会尽可能的降低GPU的使用率,整体机器的资源使用率会下降
# options.add_argument('--headless')
return options
日志器配置
# 设置日志器
import logging
def setLog(logfile):
logger=logging.getLogger()
logger.setLevel(logging.INFO)
#设置日志格式器
fmt='%(asctime)s %(filename)s %(levelname)s %(funcName)s %(message)s'
Formatter=logging.Formatter(fmt)
#设置控制台处理器
sh=logging.StreamHandler()
sh1=logging.FileHandler(logfile)
logger.addHandler(sh)
logger.addHandler(sh1)
return logger
关键字驱动的设置
# 1.将关键字驱动类实现,包含健壮性需要考虑在内
from time import sleep
from selenium import webdriver
from selenium.webdriver.common import by
from selenium.webdriver.support.wait import WebDriverWait
# 生成一个浏览器(webdriver对象):反射机制
from options import Options
from setLog import setLog
log=setLog(r'..\class519\logs\log2.log')
def broser(type_):
options = Options().options_conf()
try:
driver = getattr(webdriver, type_)(options=options)
except Exception as e:
print(e)
driver = webdriver.Chrome()
return driver
# 定义工具类
class WebKey:
# driver=webdriver.Chrome()
#构造函数
def __init__(self,type_):
self.driver=broser(type_)
self.driver.implicitly_wait(10)
# self.driver.maximize_window()
# 访问URL
def open(self,url):
self.driver.get(url)
# 退出
def quit(self):
self.driver.quit()
# 元素定位
# def locator(self,name,value):
# return self.driver.find_element(name,value)
def locator(self,name,value):
names={"id","xpath","link text","partial link text","name","tag name","class name","css selector",
"ids","xpaths","link texts","partial link texts","names","tag names","class names","css selectors"}
try:
return self.driver.find_element(name,value)
except Exception :
if(name in names):
# print('元素定位失败:定位信息填写错误,元素定位信息为{}'.format(value))
log.info('元素定位失败:定位信息填写错误,元素定位信息为{}'.format(value))
else:
# print('元素定位失败:{}不是定位方法'.format(name))
log.info('元素定位失败:{}不是定位方法'.format(name))
# 点击
def click(self,name,value):
try:
self.locator(name,value).click()
except Exception:
# 和元素定位的错误原因一致,不再输出错误原因
pass
# 输入
def input(self,name, value,txt):
try:
self.locator(name, value).send_keys(txt)
except Exception:
# 和元素定位的错误原因一致,不再输出错误原因
pass
#文本断言
def assert_text(self,name, value,expect_text,fail_text):
try:
assert self.locator(name, value).text==expect_text,fail_text
self.driver.save_screenshot('../class519/screens/文本断言截图1.png')
except Exception:
# 和元素定位的错误原因一致,不再输出错误原因
pass
#显示等待断言
def assert_wait(self,name,value,waitTime,fail_text):
WebDriverWait(self.driver,waitTime,0.5).until(
lambda el:self.locator(name,value),message=fail_text
)
self.driver.save_screenshot('../class519/screens/等待断言截图1.png')
def switch_handle(self,num,expect_text,fail_text):
# 获取到所有句柄
hds = self.driver.window_handles
# 切换句柄
self.driver.switch_to.window(hds[num])
assert self.driver.title==expect_text,fail_text
self.driver.save_screenshot('../class519/screens/获取句柄1.png')
def time(self,time):
sleep(time)
def clear(self,name, value):
self.locator(name, value).clear()
登录商城-加入购物车
from WebKeyFile import WebKey
#实例化
wk=WebKey("Chrome")
#获取网址
wk.open('http://39.98.138.157/shopxo/index.php')
#点击登录按钮
wk.click('xpath','//div[@class="menu-hd"]/a[text()="登录"]')
#输入用户名
wk.input('xpath','//input[@name="accounts"]','18700000000')
# 输入密码
wk.input('xpath','//input[@name="pwd"]','18700000000')
#点击登录按钮
wk.click('xpath','//button[text()="登录"]')
#校验是否登录成功
wk.assert_wait('xpath','//p[text()="登录成功"]',10,'登录失败')
#定位到搜索框
wk.click('id', 'search-input')
#在搜索框中输入iPhone 6 plus
wk.input('id', 'search-input','iPhone 6 plus')
#点击搜索按钮
wk.click('id', 'ai-topsearch')
#点击手机超链接
wk.click('xpath', '//p[text()="苹果(Apple)iPhone 6 Plus (A1524)移动联通电信4G手机 金色 16G"]')
#获取句柄,判断是否进入到商品页面
wk.switch_handle(1,'苹果(Apple)iPhone 6 Plus (A1524)移动联通电信4G手机 金色 16G',"获取句柄失败")
#选择套餐
wk.click('xpath', '//li[@data-value="套餐一"]')
wk.time(2)
#选择颜色
wk.click('xpath', '//li[@data-value="银色"]')
wk.time(2)
#选择容量
wk.click('xpath', '//li[@data-value="32G"]')
#清空数量
wk.clear('xpath', '//input[@type="number"]')
#输入需要加入购物车的商品数量为2
wk.input('xpath', '//input[@type="number"]',2)
#点击加入购物车
wk.click('xpath', '//button[@title="加入购物车"]')
#点击购物车按钮,进入购物车页面
wk.click('xpath', '//span[text()="购物车"]')
#判断购物车中是否存在加入到购物车的商品
wk.assert_text('xpath','//a[text()="苹果(Apple)iPhone 6 Plus (A1524)移动联通电信4G手机 金色 16G"]','苹果(Apple)iPhone 6 Plus (A1524)移动联通电信4G手机 金色 16G','加入购物车失败')