目录
一、ChromeOptions设置项
二、WebUI实操
一、ChromeOptions设置项
浏览器在启动之初,如果需要对浏览器进行一些特定内容的定义,可以直接通过浏览器的options类来实现相对应的配置内容。不同的浏览器有不同的options,chrome对应的就是ChromeOptions类。
ChromeOptions类没有任何技术含量在。options设置项有非常多。不需要去死记硬背,因为记不下来。常态化都会是写好一个options类,带着走。对于特殊的设置项,可以需要用到什么就百度搜索什么即可。
如何辨别你查找的options类是有效的?
通过一个指令来看:
# 支持python2.7的ChromeOptions内容:这个版本已经无效了。
driver1 = webdriver.Chrome(chrome_options=options)
下面才是有效的:
# 支持python3.7的ChromeOptions内容
driver1 = webdriver.Chrome(options=options)
将chrome浏览器的常用配置进行封装,便于后续driver对象的调用:
from selenium import webdriver
def options():
options = webdriver.ChromeOptions()
# 页面加载策略
options.page_load_strategy = 'normal'
# 窗体最大化
options.add_argument('start-maximized')
# 指定浏览器的启动坐标
# options.add_argument('window-position=500,500')
# 指定浏览器的窗体大小
# options.add_argument('window-size=1200,800')
# 去掉浏览器的自动化黄条:目前的阶段下已经不是那么有需要的了。
options.add_experimental_option('excludeSwitches', ['enable-automation', 'enable-logging'])
# options.add_experimental_option('disable-infobars') # 只限于python2.7的版本有效,现在已经失效
# 无头模式:不在桌面生成浏览器的运行,浏览器作为后台程序,静默后台运行。虽然无法肉眼看到,但实际上一切照旧,该运行的依旧会正常运行。可以减少测试设备的资源损耗。一般可用于持续集成中,虽然有可能出现错误。
# options.add_argument('--headless')
# 去掉账号密码保存弹窗
prefs = {
'credentials_enable_service': False,
'profile.password_manager_enable': False
}
options.add_experimental_option("prefs", prefs)
# 加载本地缓存信息:Selenium默认启动的浏览器是不会加载本地缓存的。
'''
1. 该功能可以实现验证码的绕过,但前提条件是需要提前手动登录一次(只对可以记住登录状态的网站有效)。
2. 该功能可以起到一定程度的反爬效果,具体根据被访问系统的反爬机制而决定
3. 该功能的使用,只能够在一个浏览器生效,如果在启动之前开启有其他的chrome浏览器,则该功能无法生效,会报错。一定要关闭所有浏览器以后再运行webdriver
'''
# 自动化测试不会处理验证码,因为验证码本身就是防止自动化脚本的。
# options.add_argument(r"--user-data-dir=C:\Users\15414\AppData\Local\Google\Chrome\User Data")
# 启动隐身模式
# options.add_argument('incognito')
# 去除控制台多余的信息:避免掉无用的信息内容
# options.add_experimental_option('excludeSwitches', ['enable-logging'])
# 去除控制台多余的信息手段二
options.add_argument('--log_level=3')
options.add_argument('--disable-gpu')
options.add_argument('--ignore-certificate-errors')
# 返回options对象
return options
如果需要设置其他的选项,可以在网上搜索添加。
二、WebUI实操
下面是以商城项目为例,实现自动化购物的整个流程:
'''
fecmall从登陆到下订单进行购买的完整流程:
1. 用户登录
2. 商品的选择
3. 商品的下单购买
4. 校验购买是否成功
'''
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.support.select import Select
import class17.options as opt
# 创建浏览器对象
driver = webdriver.Chrome(options=opt.options())
# 隐式等待5秒
driver.implicitly_wait(5)
# 访问fecmall的登录页
driver.get('http://hcc.fecmall.com/customer/account/login')
# 登录
driver.find_element('id', 'email').send_keys('2314419713@qq.com')
driver.find_element('id', 'pass').send_keys('hzp123456')
driver.find_element('id', 'js_registBtn').click()
# 进入商品详情页
ActionChains(driver).move_to_element(driver.find_element('link text', '婚礼')).perform()
driver.find_element('link text', '婚礼礼服').click()
driver.find_element('xpath', '//img[contains(@data-original,"12229472_1.jpg")]').click()
# 选择商品属性
driver.find_element('xpath', '//img[contains(@src,"3147185361598497.jpg")]').click()
driver.find_element('name', 'qty').clear() # 清空当前输入框的默认值:如果输入框有默认值一定要记得先清空,不然输入的内容可能会有问题
driver.find_element('name', 'qty').send_keys(5)
driver.find_element('id', 'js_registBtn').click()
# 下单支付
driver.find_element('xpath', '//button[@title="Proceed to Checkout"]').click()
# 添加收货地址信息
driver.find_element('id', 'billing:telephone').send_keys('18973404302')
driver.find_element('id', 'billing:street1').send_keys('自动化测试')
driver.find_element('id', 'billing:street2').send_keys('我的家里')
# 收货地址的国家select标签
country = Select(driver.find_element('id', 'billing:country'))
# 设置为中国
country.select_by_visible_text('China')
sleep(1)
# 收货地址省select标签
state = Select(driver.find_element('xpath', '//select[@id="address:state"]'))
state.select_by_value('HUN')
driver.find_element('id', 'billing:city').send_keys('长沙')
driver.find_element('id', 'billing:zip').send_keys('421001')
# 订单支付
driver.find_element('link text', '支付订单').click()
# 断言校验支付是否成功
reality = driver.find_element('xpath', '//h2[@class="sub-title"]').text
assert '您的订单已收到,感谢您的购买!' == reality, '购买失败'
sleep(5)
# 关闭浏览器
driver.quit()