鱼C论坛

 找回密码
 立即注册
查看: 2121|回复: 5

[已解决]关于selenium搭建测试框架的问题!!

[复制链接]
发表于 2023-3-3 12:55:53 | 显示全部楼层 |阅读模式
10鱼币
呜呜呜呜救救我
我跟着视频打的但是不知道为什么不停的报错,但是我转牛角尖的性格就想把他解决掉
报错信息是这样的
7
6
1
2
3
None
http://cal.apple886.com/
4
5


TypeError: PageCalc() takes no arguments
这个是业务层,关于测试计算机加法的练习
import parameterized as parameterized
from test01.po1.base.get_driver import GetDriver
from test01.po1.page.page_calc import PageCalc
import unittest
from selenium import webdriver


class Testcalc(unittest.TestCase):
    print('1')
    driver = None
    # setup
    @classmethod
    def setUpClass(cls):
        print('2')
        # 获取driver
        cls.driver = GetDriver().get_driver()
        print("5")
        # 初始化
        cls.calc = PageCalc(cls.driver)

    # teardown
    @classmethod
    def tearDownClass(cls):
        GetDriver.quit_driver()

    # 测试加法方法
    @parameterized.parameterized.expand([(1, 2, 3)])
    def test_add_cal(self, a, b, expect):
        print('10')
        self.calc.page_add_calc(a, b)
        try:
            # 断言
            self.assertEqual(self.calc.page_result_get(), expect)
        except AssertionError:
            # 截图
            self.calc.page_get_screenshot()

    def assertEqual(self, param, expect):
        pass
下面是获取driver的封装
from selenium import webdriver
from test01.po1 import page


class GetDriver:
    # 设置类属性
    driver = None
    # 获取driver
    @classmethod
    def get_driver(cls):
        print('3')
        print(cls.driver)
        if cls.driver is None:
            cls.driver = webdriver.Chrome()
            cls.driver.maximize_window()
            print(page.url)
            cls.driver.get(page.url)
            print("4")

        return cls.driver

    # 退出driver
    @classmethod
    def quit_driver(cls):
        if cls.driver:
            cls.driver.quit() 
            cls.driver = None
下面是页面层的一些封装
from selenium.webdriver.common.by import By
from test01.po1.base.base import Base
from test01.po1 import page
from test01.po1.page import calc_add, calc_eql, calc_result, calc_clear


class PageCalc(Base):
    print('6')
    # 点击数字
    def page_num_click(self,num):
        print('0')
        for i in num:
            loc = By.name, "simple{}".format(i)
        self.base_click_num(loc)

    # 点击加号
    def page_add_click(self):
        self.base_click_num(calc_add)

    # 点击等号
    def page_eql_click(self):
        self.base_click_num(calc_eql)
    # 获取结果
    def page_result_get(self):
        return self.base_get_value_element(calc_result)
    # 清屏
    def page_clear_click(self):
        self.base_click_num(calc_clear)

    def page_get_screenshot(self):
        self.base_get_screenshot()
    #组装
    def page_add_calc(self,a,b):
        print('9')
        self.page_num_click(a)
        self.page_add_click()
        self.page_num_click(b)
        self.page_eql_click()
        self.page_result_get()
        self.page_clear_click()
下面是基础层一些操作的封装
import time

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait


class Base:
    print('7')

    # 查找元素
    def base_find_element(self,loc):
        print('8')
        return WebDriverWait(self.driver,timeout=30,poll_frequency=0.5).until(lambda x:x.find_element(*loc))

    # 点击
    def base_click_num(self,loc):
        self.base_find_element(loc).click()

    # 获取value值封装
    def base_get_value_element(self,loc):
        return self.base_find_element(loc).get_atrribute("value")

    # 截图
    def base_get_screenshot(self):
        self.driver.get_screenshot_as_file("./{}.png".format(time.strftime("%Y_%m_%d_%H_%M_%S")))
报错的那些数字是我再找哪步开始出错,似乎是初始化setup里的
        # 初始化
        cls.calc = PageCalc(cls.driver)
这一步显示没有参数,但是我已经传参了呀,在get driver里面也返回了
最佳答案
2023-3-3 12:55:54
yukari123 发表于 2023-3-3 13:13
我是在page的包里的__init__.py里面写的这些配置信息

bbq了我不会重写__init__方法,目前还在跟着视频 ...

所以你为什么要给 PageCalc 传参数?

最佳答案

查看完整内容

所以你为什么要给 PageCalc 传参数?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-3 12:55:54 | 显示全部楼层    本楼为最佳答案   
yukari123 发表于 2023-3-3 13:13
我是在page的包里的__init__.py里面写的这些配置信息

bbq了我不会重写__init__方法,目前还在跟着视频 ...

所以你为什么要给 PageCalc 传参数?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-3 13:05:30 | 显示全部楼层
它这个不是说你没有传参,而是不接受参数呀

我看了一下你的 PageCalc 没有重写 __init__ 方法,

默认的 __init__ 方法是不接受任何初始化参数的,你得重写 __init__
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-3-3 13:13:55 | 显示全部楼层
isdkz 发表于 2023-3-3 13:05
它这个不是说你没有传参,而是不接受参数呀

我看了一下你的 PageCalc 没有重写 __init__ 方法,

我是在page的包里的__init__.py里面写的这些配置信息
'''以下为计算机配置数据'''
from selenium.webdriver.common.by import By
def __init__(self):
    calc_num = By.ID, "simple9"
    calc_add = By.ID, "simpleAdd"
    calc_eql = By.ID, "simpleEqual"
    calc_result = By.ID, "resultIpt"
    calc_clear = By.CSS_SELECTOR, "#simpleClearAllBtn"

    '''以下为服务器配置数据'''
    url = "http://cal.apple886.com/"
bbq了我不会重写__init__方法,目前还在跟着视频老师一步一步打的程度。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-3-3 13:23:57 | 显示全部楼层
isdkz 发表于 2023-3-3 13:16
所以你为什么要给 PageCalc 传参数?

我靠!!!大佬你好神,真的句句解决问题!太牛逼了我也想成为和你一样的大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-3 13:27:56 | 显示全部楼层
yukari123 发表于 2023-3-3 13:23
我靠!!!大佬你好神,真的句句解决问题!太牛逼了我也想成为和你一样的大佬

坚持学下去,不用多久你也会成为大佬的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-2 01:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表