首页 > 其他分享 >selenium自动化测试-登录网站用户

selenium自动化测试-登录网站用户

时间:2023-09-21 11:15:21浏览次数:39  
标签:return 登录 selenium driver element 自动化 print find

昨天学习了selenium自动化测试工具的入门,知道了Selenium是用于自动化控制浏览器做各种操作,打开网页,点击按钮,输入表单等等。

今天学习通过selenium自动化测试工具自动登录某网站用户操作。

第一步:确定目标网址

比如:天天基金网站登录页面"https://login.1234567.com.cn/login"

第二步:确定登录表单元素位置

通过谷歌浏览器F12调试功能可以很快的定位页面元素位置,这也是开发常用谷歌浏览器的原因吧!

比如:用户账号输入框位置

 

 

 

通过 F12 调试确定元素位置,然后右键--》Copy--》Copy XPath: 获得账号输入框位置: //*[@id="tbname"]

在后面写代码操作该元素使用该方法即可:  driver.find_element(By.ID, "tbname")

依次类推,获取密码,记住交易账号单选框,已阅读单选框,登录按钮等等表单元素位置。

 

第三步:编写代码

采用拆分步骤细化功能模块封装方法编写代码,便于后续扩展功能模块。

ttjj_webdriver.py:

# -*- coding: UTF-8 -*-
# selenium 自动化测试工具
import time
import random
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By


# 打开驱动
def open_driver():
    try:
        # 连接浏览器web驱动全局变量
        global driver
        # Linux系统下浏览器驱动无界面显示,需要设置参数
        # “–no-sandbox”参数是让Chrome在root权限下跑
        # “–headless”参数是不用打开图形界面
        '''
        chrome_options = Options()
        # 设为无头模式
        chrome_options.add_argument('--headless')
        chrome_options.add_argument('--no-sandbox')
        chrome_options.add_argument('--disable-gpu')
        chrome_options.add_argument('--disable-dev-shm-usage')
        # 连接Chrome浏览器驱动,获取驱动
        driver = webdriver.Chrome(chrome_options=chrome_options)
        '''

        # 此步骤很重要,设置chrome为开发者模式,防止被各大网站识别出来使用了Selenium
        options = Options()
        # 去掉提示:Chrome正收到自动测试软件的控制
        # options.add_argument('disable-infobars')
        # 以键值对的形式加入参数,打开浏览器开发者模式
        # options.add_experimental_option('excludeSwitches', ['enable-automation'])
        # 打开浏览器开发者模式
        # options.add_argument("--auto-open-devtools-for-tabs")
        driver = webdriver.Chrome(chrome_options=options)

        # driver = webdriver.Chrome()
        print('连接Chrome浏览器驱动')
        # 浏览器窗口最大化
        driver.maximize_window()
        '''
        1, 隐式等待方法
        driver.implicitly_wait(最大等待时间, 单位: 秒)
        2, 隐式等待作用
        在规定的时间内等待页面所有元素加载;
        3,使用场景:
        在有页面跳转的时候, 可以使用隐式等待。
        '''
        driver.implicitly_wait(3)
        # 强制等待,随机休眠 暂停0-3秒的整数秒,时间区间:[0,3]
        time.sleep(random.randint(0, 3))

    except Exception as e:
        driver = None
        print(str(e))


# 关闭驱动
def close_driver():
    driver.quit()
    print('关闭Chrome浏览器驱动')


# 检查元素是否存在
def check_element_exists(condition, element):
    '''
    @方法名称: 校验判断网页元素是否存在
    @中文注释: 校验判断网页元素是否存在
    @入参:
        @param condition str 网页元素定位条件
        @param element str 网页元素定位坐标
    @出参:
        @返回状态:
            @return 0 失败
            @return 1 成功
            @return 2 异常
        @返回错误码
        @返回错误信息
    @作    者: PandaCode辉
    @创建时间: 2023-09-21
    @使用范例: check_element_exists('id', 'username')
    '''
    try:
        if (not type(condition) is str):
            print('条件参数错误,不是字符串:' + element)
            return [0, "111111", "条件参数错误,不是字符串", [None]]
        if (not type(element) is str):
            print('元素参数错误,不是字符串:' + element)
            return [0, "111112", "元素参数错误,不是字符串", [None]]
        # 根据条件定位元素
        if condition == 'class':
            driver.find_element(By.CLASS_NAME, element)
        elif condition == 'id':
            driver.find_element(By.ID, element)
        elif condition == 'xpath':
            driver.find_element(By.XPATH, element)
        return [1, '000000', "判断网页元素成功", [None]]
    except Exception as e:
        return [0, '999999', "判断网页元素是否存在异常," + str(e), [None]]


def pc_ttjj_login(username, password):
    '''
    @方法名称: 登录天天基金用户
    @中文注释: 登录天天基金用户
    @入参:
        @param username str 登录用户
        @param password str 登录密码
    @出参:
        @返回状态:
            @return 0 失败或异常
            @return 1 成功
        @返回错误码
        @返回错误信息
    @作    者: PandaCode辉
    @创建时间: 2023-09-21
    @使用范例: ['user123','pwd123']
    '''
    try:

        if (not type(username) is str):
            return [0, "111111", "登录用户参数类型错误,不为字符串", [None]]
        if (not type(password) is str):
            return [0, "111112", "登录密码参数类型错误,不为字符串", [None]]

        print('开始打开Chrome浏览器驱动')
        open_driver()

        print('随机休眠')
        # 随机休眠 暂停0-2秒的整数秒
        time.sleep(random.randint(0, 2))

        print('username:' + username + '/password:' + password)

        # 登录时请求的url
        login_url = 'https://login.1234567.com.cn/login'
        driver.get(login_url)

        print('随机休眠')
        # 随机休眠 暂停0-2秒的整数秒
        time.sleep(random.randint(0, 2))

        # 清空登录框
        # 通过webdriver对象的find_element_by_xx(" "),在selenium的4.0版本中此种用法已经抛弃。
        # driver.find_element_by_xpath("./*//input[@id='tbname']").clear()
        '''
        通过webdriver模块中的By,以指定方式定位元素
        导入模块:from selenium.webdriver.common.by import By

         driver.find_element(By.ID,"username")
         driver.find_element(By.CLASS_NAME,"passwors")
         driver.find_element(By.TAG_NAME,"imput"
        '''
        driver.find_element(By.ID, "tbname").clear()
        print('输入用户名')
        # 自动填入登录用户名
        # driver.find_element_by_xpath("./*//input[@id='tbname']").send_keys(username)
        driver.find_element(By.ID, "tbname").send_keys(username)

        print('随机休眠')
        # 随机休眠 暂停0-2秒的整数秒
        time.sleep(random.randint(0, 2))

        # 清空密码框
        driver.find_element(By.ID, "tbpwd").clear()
        print('输入密码')
        # 自动填入登录密码
        driver.find_element(By.ID, "tbpwd").send_keys(password)

        print('随机休眠')
        # 随机休眠 暂停0-2秒的整数秒
        time.sleep(random.randint(0, 2))

        # 点击#记住交易帐号
        driver.find_element(By.ID, "tbcook").click()
        print('点击记住交易帐号')

        # 点击#同意服务协议
        driver.find_element(By.ID, "protocolCheckbox").click()
        print('点击同意服务协议')

        # 点击登录按钮进行登录
        driver.find_element(By.ID, "btn_login").click()
        print('点击登录按钮')
        # 等待3秒启动完成
        driver.implicitly_wait(3)
        time.sleep(3)

        print('随机休眠')
        # 随机休眠 暂停0-2秒的整数秒
        time.sleep(random.randint(0, 2))

        # 检查元素是否存在,查看持仓明细元素,用来判断是否登录成功
        check_rsp = check_element_exists('id', "myassets_hold")
        if check_rsp[0] == 1:
            print("登录成功")
            print('开始关闭Chrome浏览器驱动')
            close_driver()
            # 返回容器
            return [1, '000000', "登录成功", [None]]
        else:
            return check_rsp

    except Exception as e:
        print("登录账户异常," + str(e))
        print('开始关闭Chrome浏览器驱动')
        close_driver()
        return [0, '999999', "登录账户异常," + str(e), [None]]


# 主方法
if __name__ == '__main__':
    username = "123456789"
    password = "password123"

    # 登录用户
    rst = pc_ttjj_login(username, password)

 

第四步:运行测试效果

 

 

-------------------------------------------end---------------------------------------

 

标签:return,登录,selenium,driver,element,自动化,print,find
From: https://www.cnblogs.com/xh2023/p/17719415.html

相关文章

  • selenium 滚动截图参考
       Selenium本身并不直接支持滚动截图,但是你可以通过编程方式实现滚动截图。下面是一个Python的例子,使用Selenium和PIL库实现滚动截图:fromseleniumimportwebdriverfromPILimportImageimporttime#初始化浏览器驱动driver=webdriver.Firefox()......
  • 用户注册与登录界面java源码(带验证码)
    importjavax.swing.*;importjava.awt.*;importjava.util.Random;publicclassRegistrationSystemextendsJFrame{privatefinalJTextFieldusernameTextField;privatefinalJPasswordFieldpasswordField;......
  • 使用 Selenium 或其他工具模拟浏览器使用及语法代码
    使用Selenium模拟浏览器使用的代码示例如下:fromseleniumimportwebdriverfromselenium.webdriver.common.keysimportKeys#创建浏览器驱动实例driver=webdriver.Chrome()#打开网页driver.get("https://www.example.com")#查找并填写表单search_box=driver.f......
  • 自动化测试系列:接口自动化测试框架--05通过邮件发送测试结果的封装
    From: https://mp.weixin.qq.com/s/3w9GT2TYKIhrKCi36-DYRw---------------------------------------------------------------------------------------框架功能介绍1.自动整理接口测试用例:只需使用抓包工具,将需要接口请求另存为HAR文件,执行har2excel.bat即可自动生成接口请......
  • Selenium八大定位方法
    From: https://mp.weixin.qq.com/s/e0Kj7SrTRL_hP2fS5zPg2g-------------------------------------------------------------------------------------引言在使用Selenium进行Web自动化测试时,准确地定位元素是非常重要的一步。Selenium提供了多种元素定位方法,本文将深入探究这......
  • CAS实现SSO单点登录原理
    1.      CAS 简介1.1.  WhatisCAS ?CAS ( CentralAuthenticationService )是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 WebSSO )。CAS 开始于 2001 年,并在 2004 年 12 月正式成为 JA-SIG 的......
  • SSO 之 (单点登录)实施中遇到的几个问题
    单点登录应用中,遇到如下的几个问题:1.超时问题;2.jsessionid问题;3.单点退出时有时子系统未能正常退出;4.有些请求路径不需要单点登录过滤器拦截;5.不同应用服务实现可能要求SSO客户端做适应性改造。我们具体分析一下,并提出解决方法。1.超时问题       我们提供的CAS开源单点登......
  • 如何上传专用密码和登录iCloud教程
    步骤1:在AppUploader这个页面中,依次按照要求操作。步骤2:进入管理您的AppleID页面,然后点击红圈中的更多。步骤3:根据步骤操作,即可生成专用密码。步骤4:在App Uploader页面输入前面生成的专用密码即可登录成功。步骤五:在iCloud页面进行登录操作。步骤六:找到AppID。 步骤七:输入App......
  • 直击火山引擎V-Tech峰会!仅需简单登录,即可极速体验数据引擎ByteHouse
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 9月19日,火山引擎“数据飞轮·V-Tech数据驱动科技峰会”在上海举办。会上重磅发布数智平台VeDI应用大模型(LargeLanguageModels)能力,并进一步解读了数据飞轮的行业应用与实践。作为核......
  • Python 爬虫使用 Selenium 如何在 WebElement 获得属性
    首先,我们需要初始化驱动和指定使用特定的流量器。 代码如下: fromseleniumimportwebdriverwd=webdriver.Firefox()上面的代码可以简单的理解为启动一个Firefox的实例。使用css选择器可以把程序读取的HTML理解为一个Doc。我们需要在Doc中选择我们的元素,这个叫做选择......