jejsvvshzhs 2024-09-04 17:45 采纳率: 0%
浏览 8

@pytest.mark.parametrize问题

可以成功运行test_02_demo
但是pycharm报错说找不到

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from InputElement import InputHandler
from FindElement import find
import pytest


# from AssertElement import AssertElement


class TestDemo2:
    driver = None
    find = None
    InputHandler = None

    def setup_class(self):
        self.driver = webdriver.Chrome()
        url = 'http://www.baidu.com'
        self.driver.get(url)
        self.driver.maximize_window()
        self.find = find(self.driver)
        self.InputHandler = InputHandler(self.driver)

    def setup_method(self):
        pass

    def teardown_method(self):
        #  url = 'http://www.baidu.com'
        #  self.driver.get(url)
        self.driver.back()
        # print("清理。。。")

    def teardown_class(self):
        pass

    test_data = [
        ("kw", "测试1", '//div[ @ id = "head"]//div[ @ id = "u"]//a[text() = "百度首页"]', 'su', True),
        ("kw", "测试2", '//div[@id="head"]//div[@id="u"]//a[text()="登录"]', 'su', True)
    ]

    @pytest.mark.parametrize("id_value, keys_value,xpath_value,click_id, expected_result", test_data)
    def test_01_demo(self,id_value, keys_value, xpath_value, click_id, expected_result):
        # driver.find_element_by_id("kw").send_keys("测试1")
        #  inputTag = self.driver.find_element(By.ID, "kw").send_keys("测试1")
        # inputTag1 = self.driver.find_element(By.ID, "su").click()
        # time.sleep(2)
        self.InputHandler.Input_click_element(id_value, keys_value)
        self.find.find_element_click(click_id)
        assert expected_result == expected_result


    #    time.sleep(3)
    #       self.assert_element_exist('//div[ @ id = "head"]//div[ @ id = "u"]//a[text() = "百度首页"]', 'su')
    def test_02_demo(self,id_value, keys_value, xpath_value, click_id, expected_result):
        # self.InputHandler.Input_click_element("kw","测试1")
        self.InputHandler.Input_click_element(id_value, keys_value)
        self.find.find_element_click(click_id)
        assert expected_result == expected_result

        # driver.find_element_by_id("kw").send_keys("测试1")
        # self.InputHandler.Input_click_element("kw", "测试2")
        # self.find.find_element_click("su")
        # time.sleep(2)
        # self.assert_element_exist('//div[@id="head"]//div[@id="u"]//a[text()="登录"]', 'su')
        # time.sleep(3)

    def assert_element_exist(self, xpath, id):
        try:
            element1 = self.driver.find_element(By.ID, id)
        except Exception as e:
            assert False
            elements = self.driver.find_elements(By.XPATH,
                                                 xpath)
            assert len(elements) > 0


img

  • 写回答

1条回答 默认 最新

  • 吃不了席 2024-09-04 17:46
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在您的测试代码中,setup_class方法定义了一个全局变量driver,这可能是您遇到错误的原因之一。在PyCharm中,您可以手动创建并设置一个Driver类的实例,然后将其作为全局变量。

    首先,您需要创建一个新的类继承自BaseTestCase(或者根据您的需求选择其他基类)。在__init__方法中初始化driver属性,并通过setup_class方法将driver设置为全局变量:

    class BaseTestCase:
        def __init__(self):
            self.driver = webdriver.Chrome()
    
        @classmethod
        def setup_class(cls):
            cls.driver = webdriver.Chrome()
            url = 'http://www.baidu.com'
            cls.driver.get(url)
            cls.driver.maximize_window()
            cls.find = find(cls.driver)
            cls.InputHandler = InputHandler(cls.driver)
    
    
    class TestDemo(BaseTestCase):
    
        test_data = [
            ("kw", "测试1", '//div[@id="head"]//div[@id="u"]//a[text()="百度首页"]', 'su', True),
            ("kw", "测试2", '//div[@id="head"]//div[@id="u"]//a[text()="登录"]', 'su', True)
        ]
    
        @pytest.mark.parametrize("id_value, keys_value, xpath_value, click_id, expected_result", test_data)
        def test_01_demo(self, id_value, keys_value, xpath_value, click_id, expected_result):
            self.InputHandler.Input_click_element(id_value, keys_value)
            self.find.find_element_click(click_id)
            assert expected_result == expected_result
    
        @pytest.mark.parametrize("id_value, keys_value, xpath_value, click_id, expected_result", test_data)
        def test_02_demo(self, id_value, keys_value, xpath_value, click_id, expected_result):
            self.InputHandler.Input_click_element(id_value, keys_value)
            self.find.find_element_click(click_id)
            assert expected_result == expected_result
    
        def assert_element_exist(self, xpath, id):
            try:
                element1 = self.driver.find_element(By.ID, id)
            except Exception as e:
                assert False
                elements = self.driver.find_elements(By.XPATH,
                                                     xpath)
                assert len(elements) > 0
    

    现在,您应该可以在setup_class中正确地初始化driver并将其设置为全局变量了。这样,即使在不同的测试方法之间调用setUp方法,driver也会保持不变。此外,您还需要确保在每个测试方法内部调用tearDown方法以清除浏览器窗口。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月4日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?