欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Selenium Web自动化测试(电商)

程序员文章站 2022-07-14 08:46:11
...

需求驱动代码

1、首先打开浏览器:

执行脚本后发现报错:

1)FileNotFoundError: [WinError 2] 系统找不到指定的文件。

2)selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.
Selenium Web自动化测试(电商)

这是因为chromedriver没有配置到环境变量里。

解决方法:把chromedriver.exe配置到环境变量里,(放到python的目录下就可以,因为python已经配置到环境变量里了)

延伸:chromedriver.exe的下载方法:

Selenium Web自动化测试(电商)点进去后进行下载

注意:下载chromedriver时,需要浏览器版本和driver版本的对应:

浏览器--》帮助--》关于Google Chrome,可以看到谷歌版本为86.0.4240.198

Selenium Web自动化测试(电商)

确认好浏览器版本后,就下载对应版本的chromedriver (如果对应版本有多个,就下载最新的那个)

 

 

Selenium Web自动化测试(电商)

Selenium Web自动化测试(电商)

下载Windows版本后,进行解压,就可以看到下载后的chromedriver.exe,然后把它放到python的目录下

Selenium Web自动化测试(电商)

再去执行"打开浏览器"脚本,即打开成功

Selenium Web自动化测试(电商)

2、访问网址:http://testingedu.com.cn:8000/index.php

Selenium Web自动化测试(电商)

访问网址后,会发现因为服务器的带宽有限,所以每一次加载首页时会特别慢,这时就需要用"加载缓存的技术"去解决它。

Selenium Web自动化测试(电商)

注意 :如果你使用了用户文件 ,那么你只能用脚本打开一个浏览器。手动也不能打开。(比如已经使用脚本打开了一个浏览器但是没有关掉,这时再次执行脚本打开浏览器,就会报错"user data directory is already in use")

Selenium Web自动化测试(电商)

配置Chrome安装路径(如果安装时的位置是默认路径,就不要这一步)

Selenium Web自动化测试(电商)

3、使用面向对象的封装

1)封装"打开浏览器"函数

Selenium Web自动化测试(电商)

Selenium Web自动化测试(电商)

Selenium Web自动化测试(电商)

2)封装"打开网站"

Selenium Web自动化测试(电商)

4、实现"登录"的操作

1)找到"登录",右键选择"检查"

Selenium Web自动化测试(电商)

2)找到"登录"的元素,右键选择copy-->copy XPath

Selenium Web自动化测试(电商)

小技巧:当你使用了用户文件,可能不能调试。这时去谷歌的属性--》目标里配置一个新的user data,这样手动打开的浏览器和自动化跑的浏览器就不会冲突。

Selenium Web自动化测试(电商)

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
相关标签: python