关键字驱动
关键字驱动知识点
关键字驱动代码
代码结构
浏览器配置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','加入购物车失败')