python_因为self踩的坑

学了相关的自动化教程后,尝试用PO模式写了一个126邮箱登录界面的自动化测试脚本。封装了一个find_element方法,以便后续写其他模块时调用。find_element用到的参数都是通过读取配置文件获得。

首先FindElement类中封装find_element方法如下:

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from util.read_ini import ReadIni

class FindElement(object):
    def __init__(self, driver):
        self.driver = driver

    def get_element(self, key):
        read_ini = ReadIni()
        data = read_ini.get_value(key)
        by = data.split(">")[0]
        value = data.split(">")[1]
        wait = WebDriverWait(self.driver, 5, 0.5)
        try:
            if by == 'id':
                return wait.until(EC.presence_of_element_located((By.ID, value)))
                #return self.driver.find_element_by_id(value)
            elif by == 'name':
                return wait.until(EC.presence_of_element_located((By.NAME, value)))
                #return self.driver.find_element_by_name(value)
            elif by == 'classname':
                return wait.until(EC.presence_of_element_located((By.CLASS_NAME, value)))
                # return self.driver.find_element_by_class_name(value)
            else:
                return wait.until(EC.presence_of_element_located((By.XPATH, value)))
                # return self.driver.find_elements_by_xpath(value)
        except:
            return None

    def iframe(self, key):
        frame = self.get_element(key)
        return self.driver.switch_to.frame(frame)

    def iframe_out(self):
        return self.driver.switch_to.default_content()

一开始使用driver.find_element_by_id(value)查找元素,后来接触了WebDriverWait,就切换使用WebDriverWait(self.driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, value)))去查找元素。但是修改写的时候WebDriverWait(driver, 5, 0.5)driver前漏加self

于是在后面LoginPage类中调用find_element时不起作用。当时各处写print()找原因,多亏一个大神帮我找出了错误。
因为被调用函数没有加self,导致调用函数实例化时参数传不进去。

下面是LoginPage类中封装的方法get_element一系列方法

from base.find_element import FindElement
from selenium import webdriver

class LoginPage(object):
    def __init__(self, driver):
        self.driver = driver
        self.fd_el = FindElement(self.driver)
        self.fd_el.iframe('login_iframe')

    def get_email_inputbox(self):
        return self.fd_el.get_element("email_inputbox") 
    ……
       
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值