python+selenium实现登录

这篇具有很好参考价值的文章主要介绍了python+selenium实现登录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前言:

本文所用项目来源于白月黑羽的白月SMS系统:Bysms 系统安装与运行 | 白月黑羽

仅用于selenium自动化登录案例实现,不做其他性质操作。

如有僭越侵权,麻烦您私信联系删除。

基础内容:

使用python+selenium+pytest实现自动化登录测试案例

# selenium安装
pip install selenium

# pytest安装
# 因为安装的python版本3.7.9安装最新的pytest有问题
# 故选择安装低版本
pip install pytest==5.1.1

一、一个例子

不做任何的分层和结合框架,一个步骤一个步骤的实现登录

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome("./chromedriver.exe")
driver.get(url="http://127.0.0.1/mgr/sign.html")
driver.implicitly_wait(10)
driver.find_element(By.ID,"username").send_keys("username")
driver.find_element(By.ID,"password").send_keys("password")
driver.find_element(By.TAG_NAME, "button").click()
driver.quit()

二、结合pytest

创建一个testcase包,建立一个testlogin.py,把上面的代码放置类中,再进行优化

python用selenium登陆,python

 1.将创建初始化对象加入夹具中,减少代码

pytest中是使用conftest作为配置文件,存放pytest.fixtrue夹具内容调用

conftest放在项目根目录下,全局有效;放置xxx目录下,只对该目录有效

# conftest.py中

import time
import pytest
from selenium import webdriver

@pytest.fixture
def driver():
    driver = webdriver.Chrome("./chromedriver.exe")
    driver.get(url="http://127.0.0.1/mgr/sign.html")
    driver.implicitly_wait(10)
    yield driver # 返回一个驱动对象
    time.sleep(2)
    driver.quit()

相当于把def test_login方法中的启动和退出变成了方法的前后置处理,注意yield返回的驱动对象,要在def test_login方法机进行调用,才有效

from selenium.webdriver.common.by import By

class TestLogin:

    def test_login(self,driver):
        driver.find_element(By.ID, "username").send_keys("username")
        driver.find_element(By.ID, "password").send_keys("password")
        driver.find_element(By.TAG_NAME, "button").click()

2.元素的分层

将定位的页面元素进行抽离处理,后续如果元素位置有变化,只需要改一个位置即可,不需要牵一发而动全身的大幅修改

创建一个tools包,新建一个tools_attribute.py,存放元素变量

from selenium.webdriver.common.by import By


class Attribute:
    login_username = (By.ID, "username")
    login_password = (By.ID, "password")
    login_btn = (By.TAG_NAME, "button")

此时,def test_login方法中find_element后边可以直接调用这个类的属性即可

from tools.tools_attribute import Attribute


class TestLogin:

    def test_login(self,driver):
        driver.find_element(*Attribute.login_username).send_keys("username")
        driver.find_element(*Attribute.login_password).send_keys("password")
        driver.find_element(*Attribute.login_btn).click()

3.参数化

使用参数化,一个方法就可以执行多条用例而不需要写多个方法去执行

pytest区别于unittest:

        unittest使用的是ddt的方式,类装饰器@ddt,方法装饰@data(*传入的数据)

        pytest使用@pytest.mark.parametrize(变量名,传入的数据)

        (关于pytest参数化放置类或者方法上的区别不做过多的探讨)

以下放置在方法上:

import pytest

from tools.tools_attribute import Attribute

caselist = [
    {"username": "byhy", "passwor0d": 12345678, "expect": "登录失败 : 用户名或者密码错误"},
    {"username": "byh", "passwor0d": 888888888, "expect": "登录失败 : 用户名或者密码错误"},
    {"username": "byhy", "passwor0d": "", "expect": "请输入密码"},
    {"username": "", "passwor0d": 12345678, "expect": "请输入用户名"}
]

class TestLogin:

    @pytest.mark.parametrize("case",caselist)
    def test_login(self,driver,case):
        driver.find_element(*Attribute.login_username).send_keys(case["username"])
        driver.find_element(*Attribute.login_password).send_keys(case["password"])
        driver.find_element(*Attribute.login_btn).click()

4.断言

当用例执行结束后,怎么判断成功不成功就需要使用断言了。

对执行后的结果进行判断 assert

import pytest

from tools.tools_attribute import Attribute

caselist = [
    {"username": "byhy", "passwor0d": 12345678, "expect": "登录失败 : 用户名或者密码错误"},
    {"username": "byh", "passwor0d": 888888888, "expect": "登录失败 : 用户名或者密码错误"},
    {"username": "byhy", "passwor0d": "", "expect": "请输入密码"},
    {"username": "", "passwor0d": 12345678, "expect": "请输入用户名"}
]

class TestLogin:

    @pytest.mark.parametrize("case",caselist)
    def test_login(self,driver,case):
        driver.find_element(*Attribute.login_username).send_keys(case["username"])
        driver.find_element(*Attribute.login_password).send_keys(case["password"])
        driver.find_element(*Attribute.login_btn).click()
        alart_text = driver.switch_to.alert.text
        # 这里登录后的消息为弹窗
        assert alart_text == case["expect"]

python用selenium登陆,python

 5.生成报告

可以用pytest-html生成页面报告,也可以使用allure,这里不做过多的探讨

写在最后:

本文所用项目来源于白月黑羽的白月SMS系统:Bysms 系统安装与运行 | 白月黑羽

仅用于selenium自动化登录案例实现,不做其他性质操作。

如有僭越侵权,麻烦您私信联系删除。

内容还有许多可以优化的地方,如分层设计,方法调用等,欢迎大佬指点和教导。文章来源地址https://www.toymoban.com/news/detail-539532.html

到了这里,关于python+selenium实现登录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python】Selenium操作cookie实现免登录

    cookie、session、token的区别: cookie存储在浏览器本地客户端,发送的请求携带cookie时可以实现登录操作。 session存放在服务器。 token应用于应用程序。 F12查看浏览器cookie: 1、获取cookie: 运行结果如下: 2、删除单个cookie: driver.delete_cookie(\\\'BAIDUID\\\') 3、删除全部cookie: driver.del

    2024年02月13日
    浏览(40)
  • Python利用Selenium实现自动化验证登录

    Python里面使用Selenium是一个很重要的自动化测试模块,我们可以用它写一个验证登录脚本,有了这个可以用来保存cookie信息等,下面是一个简单的demo:

    2024年02月15日
    浏览(46)
  • python+selenium绕过滑块验证,实现自动登录

    实现taobao自动化登录,当用webdriver打开淘宝时,滑块验证一直失败,手动滑都会失败。因为淘宝会检测window.navigator.webdriver,控件检测到你是selenium进入,所以就会弹出滑块验证。只需要绕过检测就能实现自动登录 验证了两种方法可以跳过: 第一种是给浏览器加启动参数,开

    2024年02月12日
    浏览(52)
  • Python用selenium实现自动登录和下单的项目实战

    前言 学python对selenium应该不陌生吧 Selenium 是最广泛使用的开源 Web UI(用户界面)自动化测试套件之一。Selenium 支持的语言包括C#,Java,Perl,PHP,Python 和 Ruby。目前,Selenium Web 驱动程序最受 Python 和 C#欢迎。 Selenium 测试脚本可以使用任何支持的编程语言进行编码,并且可以

    2024年01月24日
    浏览(41)
  • Python爬虫+selenium+超级鹰实现自动登录b站(最新可用版)

    注意:这里采用的是新版的selenium有关事项 1.旧版FindsByID、FindsByCss等已被删除,并替换为Find_element(By.ID,\\\' \\\'),Find_elements(By.Xpath,\\\" \\\")等实例。 2.move_to_element_with_offset 的方法定位基准位置从左上角修改为中心   观察登录图标,账号、密码,登录按钮相关的元素 使用find_element()方法

    2024年02月04日
    浏览(39)
  • selenium+opencv实现模拟登陆(滑块验证码)

    很多网站登录登陆时都要用到滑块验证码,在某些场景例如使用爬虫爬取信息时常常受到阻碍,想着用opencv的模板匹配试试能不能实现模拟登陆。本来觉得网上资料多应该还蛮容易,但实际上手还是搞了蛮久,在这里记录一下整个流程,网站无所谓主要是要有滑动验证码:

    2023年04月14日
    浏览(42)
  • python 使用selenium时如何保持浏览器内网站保持登陆状态

    user-data-dir的路径你可以这样找 打开自己的浏览器,进入chrome://version/ 页面内写到**“个人资料路径 ”**,后面有一个路径 把这个路径拷贝到add_argument的user-data-dir里面就可以了 另外还有一个坑:chrome driver和chrome版本必须要对应才能运行。 所以建议在项目期间不要随便升级浏

    2024年02月03日
    浏览(62)
  • 使用selenium驱动浏览器时携带cookie实现模拟登陆

    selenium可以帮助我们驱动浏览器打开网页,并进行一些特定的操作。但是现在越来越多的网站,也会识别selenium,并且限制了访问条件,比如:必须登录。 在selenium中,get_cookies()方法可以帮助我们获取cookie。这里以知乎为例演示一下使用。 这里用到的浏览器驱动对象为 unde

    2024年04月14日
    浏览(45)
  • 一个完整Python实战项目:selenium识别验证码实现自动登录,自动操作浏览器获取某东数据

    最近都没啥时间,很久没更新了。 今天分享一下,如何用selenium识别验证码,实现自动登录以及获取数据。 目标:某东 话不多说直接开始 环境 Python 3.10 Pycharm 模块使用 import random import time from selenium import webdriver import pyautogui import base64 import ddddocr import csv win + R 输入cmd 输入安

    2024年02月04日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包