目录结构
1、web_keys:创建web_keys.py,对webdriver的相关操作进行二次封装
2、test_cases:存放测试用例
3、data:测试yaml文件
4、conf:options.py用于配置chrome浏览器的相关设置
web_keys.py:
'''
关键字驱动,通过对webdriver的相关方法进行二次封装
'''
from selenium import webdriver
import time
from pytest_autotest.conf import options
def open_browser(type_):
try:
driver = getattr(webdriver, type_.capitalize())(options=options.ops())
except:
driver = webdriver.Chrome()
return driver
class WebKey:
def __init__(self, type_):
self.driver = open_browser(type_)
# self.driver.implicitly_wait(5)
# 打开对应url
def open_url(self, url):
self.driver.get(url)
# 定位元素
def located(self, by, value):
return self.driver.find_element(by, value)
# 点击操作
def click(self, by, value):
return self.located(by, value).click()
# 定位元素后输入内容
def input(self, by, value, content):
return self.located(by, value).send_keys(content)
def wait_time(self, sec):
time.sleep(sec)
# 关闭原先标签进行句柄切换
def switch_window(self):
handles = self.driver.window_handles
self.driver.close()
self.driver.switch_to.window(handles[1])
# 不关闭原标签进行句柄切换
def switch_window_noclose(self):
handles = self.driver.window_handles
self.driver.switch_to.window(handles[1])
# 断言
def assert_(self, by, value, expected):
try:
# 实际结果
reality = self.located(by, value).text
# 断言实际结果与预期结果
assert reality in expected, '断言失败,实际结果为{},预期结果为{}'.format(reality, expected)
except:
raise
options.py:
'''
options类 chrome浏览器配置
'''
import time
from selenium import webdriver
def ops():
options = webdriver.ChromeOptions()
# 设置加载策略
options.page_load_strategy = 'normal'
# 设置浏览器尺寸大小
options.add_argument('start-maximized')
# 设置去掉自动化小黄条
options.add_experimental_option('excludeSwitches', ['enable-automation', 'enable-logging'])
# 去掉账号密码保存,当首次登录时候浏览器可能会提醒用户要不要保存用户信息的弹窗
prefs = {
'credentials_enable_service': False,
'profile.password_manger_enable': False
}
options.add_experimental_option('prefs', prefs)
# 取出控制台多余信息方式二
options.add_argument('--log_level=3')
options.add_argument('--disable-gpu')
options.add_argument('--ignore-certificate-errors')
return options
test_webkeys.py:
import pytest
import yaml
from pytest_autotest.web_keys import web_keys
'''
登录
'''
@pytest.mark.parametrize('data',
yaml.load(stream=open('../data/login.yaml', 'r', encoding='utf-8'), Loader=yaml.FullLoader))
def test_login(data):
# 创建浏览器对象
wk = web_keys.WebKey(data['type_'])
# 访问对应网址
wk.open_url(data['url'])
# 登录
wk.click(**data['click_login'])
# 输入账号
wk.input(**data['user'])
# 输入密码
wk.input(**data['pwd'])
# 点击登录
wk.click(**data['submit'])
wk.wait_time(data['wait'])
wk.assert_(**data['verify'])
if __name__ == '__main__':
pytest.main(['-s'])
login.yaml
-
type_: chrome
url: https://wanandroid.com/index
click_login:
by: xpath
value: //*[@class="loginNav"]/li
user:
by: xpath
value: //input[@class="normal_input"][1]
content: 你的账号
pwd:
by: xpath
value: //input[@class="normal_input"][2]
content: 你的密码
submit:
by: xpath
value: //span[@class="btn save" and text()="登录"]
wait: 5
verify:
by: xpath
value: //span[@class="account"]/a[text()="oudolntea@gmail.com"]
expected: oudolntea@gmail.com