Selenium Web自动化测试(电商)
需求驱动代码
1、首先打开浏览器:
执行脚本后发现报错:
1)FileNotFoundError: [WinError 2] 系统找不到指定的文件。
2)selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.
这是因为chromedriver没有配置到环境变量里。
解决方法:把chromedriver.exe配置到环境变量里,(放到python的目录下就可以,因为python已经配置到环境变量里了)
延伸:chromedriver.exe的下载方法:
点进去后进行下载
注意:下载chromedriver时,需要浏览器版本和driver版本的对应:
浏览器--》帮助--》关于Google Chrome,可以看到谷歌版本为86.0.4240.198
确认好浏览器版本后,就下载对应版本的chromedriver (如果对应版本有多个,就下载最新的那个)
下载Windows版本后,进行解压,就可以看到下载后的chromedriver.exe,然后把它放到python的目录下
再去执行"打开浏览器"脚本,即打开成功
2、访问网址:http://testingedu.com.cn:8000/index.php
访问网址后,会发现因为服务器的带宽有限,所以每一次加载首页时会特别慢,这时就需要用"加载缓存的技术"去解决它。
注意 :如果你使用了用户文件 ,那么你只能用脚本打开一个浏览器。手动也不能打开。(比如已经使用脚本打开了一个浏览器但是没有关掉,这时再次执行脚本打开浏览器,就会报错"user data directory is already in use")
配置Chrome安装路径(如果安装时的位置是默认路径,就不要这一步)
3、使用面向对象的封装
1)封装"打开浏览器"函数
2)封装"打开网站"
4、实现"登录"的操作
1)找到"登录",右键选择"检查"
2)找到"登录"的元素,右键选择copy-->copy XPath
小技巧:当你使用了用户文件,可能不能调试。这时去谷歌的属性--》目标里配置一个新的user data,这样手动打开的浏览器和自动化跑的浏览器就不会冲突。
5、找到元素,操作元素(代码如下)
import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
class Web:
"""
封装Web自动化函数
"""
def __init__(self):
# 实例变量
self.driver = None
def openbrowser(self,br="gc",ex=None):
"""
打开浏览器
:param br: gc=谷歌浏览器(默认);ff=火狐浏览器;ie=ie浏览器
:param ex: 对应driver的路径,默认在项目的目录下
:return: 打开成功/失败
"""
if br == "gc":
# 因为服务器的带宽有限,所以每次加载首页时都特别慢,就需要加载缓存的技术
# 使用用户文件加载缓存和配置chrome的安装路径
# 首先创建一个chrome的配置项对象 option对象
option = Options()
# 获取用户文件路径
userfile = os.environ["USERPROFILE"]
# print(userfile)
# 添加用户文件配置
# 使用了缓存,也使用了cookie (有自动登录的,下次会自动登录)
option.add_argument("--user-data-dir=%s\\AppData\\Local\\Google\\Chrome\\User Data"
% userfile)
# 配置chrome安装路径
# option.binary_location = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" # 安装路径的绝对路径
# 打开浏览器
# driver就相当于打开的浏览器
if ex is None:
ex = "./chromedriver"
self.driver = webdriver.Chrome(options=option,executable_path=ex)
elif br == 'ff':
if ex is None:
ex = "./lib/geckodriver"
self.driver = webdriver.Firefox( executable_path=ex)
elif br == 'ie':
if ex is None:
ex = "./lib/IEDriverServer"
self.driver = webdriver.Ie( executable_path=ex)
self.driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/div/div[2]/a[1]') # 用单引号,里面填上复制的xpath
# 添加隐式等待凡是调了find_element_xxx的地方,都会触发
self.driver.implicitly_wait(10)
return True
def geturl(self,url):
"""
打开网站
:param url: 输入网址
:return: 打开成功/失败
"""
if self.driver is None:
return False
self.driver.get(url)
return True
def click(self,locator):
"""
通过定位器找到元素,并完成点击操作
:param locator:点击成功/失败
:return:
"""
ele = self.__find_ele(locator)
ele.click()
def input(self,locator,text):
ele = self.__find_ele(locator)
ele.send_keys(text)
def __find_ele(self,locator):
"""
通过定位器找到元素
:param locator:xpath
:return: 返回找到的元素
"""
# 八种定位方式
if locator.startswith("id="):
locator = locator[locator.find('=')+1:]
ele = self.driver.find_element_by_id(locator)
elif locator.startswith("xpath="):
locator = locator[locator.find('=')+1:]
ele = self.driver.find_element_by_xpath(locator)
else:
ele = self.driver.find_element_by_xpath(locator)
return ele
6、调用函数,实现"登录"操作
from sunmei.VIP05.class97and98.webkeys import Web web =Web() # 打开浏览器 # web.openbrowser() web.openbrowser('gc') # 打开网站 web.geturl("http://testingedu.com.cn:8000/index.php") # 找到登录,去点击 web.click('/html/body/div[1]/div[1]/div/div/div[2]/a[1]') # 里面填上复制的xpath # # 输入用户名,密码,验证码 web.input('//*[@id="username"]','13800138006') # 单引号里面填复制的xpath xpath用单引号,因为里面有可能存在双引号。 web.input('//*[@id="password"]','123456') # 单引号里面填复制的xpath web.input('//*[@id="verify_code"]','1111') # 单引号里面填复制的xpath (验证码随便填,是跳过的) # # 点击登录 web.click('//*[@id="loginform"]/div/div[6]/a') # 单引号里面填复制的xpath
推荐阅读
-
selenium+python自动化测试之页面元素定位
-
Selenium3 + Python3自动化测试系列一——安装Python+selenium及selenium3 浏览器驱动
-
python3+selenium自动化测试框架详解
-
Python(自动化线性测试) 两种方式利用selenium自动登陆QQ邮箱发送邮件并退出
-
Selenium3 + Python3自动化测试系列三——控制浏览器操作
-
关于自动化web安全测试动态fuzz的思路与实践分析(图文)
-
Python3+Selenium3自动化测试-(准备)
-
selenium自动化测试简单准备
-
首次自动化测试,使用selenium+scapy
-
selenium+python自动化测试