关键字驱动

关键字驱动知识点

 

关键字驱动代码

代码结构

 

浏览器配置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','加入购物车失败')
 

 

 

 

 


posted on 2021-05-18 18:37  射手九个半  阅读(398)  评论(0编辑  收藏  举报

导航