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日
    浏览(44)
  • python+selenium绕过滑块验证,实现自动登录

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

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

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

    2024年01月24日
    浏览(38)
  • 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日
    浏览(38)
  • selenium+opencv实现模拟登陆(滑块验证码)

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

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

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

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

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

    2024年04月14日
    浏览(43)
  • 100天精通Python(实用脚本篇)——第116天:基于selenium实现反反爬策略之添加cookie登录网站

    🔥🔥 本文已收录于 《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html 优点 : 订阅限时9.9付费专

    2024年02月20日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包