Selenium self.assertEqual 在自己封装类型错误

吴俊 · 2018年09月01日 · 最后由 吴俊 回复于 2018年09月04日 · 6232 次阅读
# coding:utf-8
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException


class BrowserEngine(object):

    def __init__(self, driver = None):
        self.driver = driver

    """控制启动浏览器"""
    def get_browser(self, browser = 'Chrome'):

        """启动判断浏览器"""
        if browser == 'Firefox':
            self.driver = webdriver.Firefox()
        elif browser == 'Chrome':
            self.driver = webdriver.Chrome()
        elif browser == 'IE':
            self.driver = webdriver.Ie()
        self.driver.maximize_window()
        self.driver.implicitly_wait(30)
        self.driver.get("https://sso.dev.weixiuhui.cn/cas/login")
        return self.driver


    def findElement(self, controlInfo):
        element = ""
        if (controlInfo.startswith("//")):
            element = self.driver.find_element_by_xpath(controlInfo)
        elif (":id/" in controlInfo or ":string/" in controlInfo):
            element = self.driver.find_element_by_id(controlInfo)
        else:
            # 剩下的字符串没有特点,无法区分,因此先尝试通过名称查找
            try:
                element = self.driver.find_element_by_name(controlInfo)
            except:
                # 如果通过名称不能找到则通过class name查找
                element = self.driver.find_element_by_class_name(controlInfo)

        return element


    def findElements(self, controlInfo):
        elements = ""
        if (controlInfo.startswith("//")):
            elements = self.driver.find_elements_by_xpath(controlInfo)
        elif (":id/" in controlInfo):
            elements = self.driver.find_elements_by_id(controlInfo)
        else:
            elements = self.driver.find_elements_by_name(controlInfo)
            if (len(elements) == 0):
                elements = self.driver.find_elements_by_class_name(controlInfo)

        return elements



    """点击操作"""
    def clickElement(self, elementInfo):
        element = self.findElement(elementInfo)
        element.click()


    """输入文本"""
    def writeElement(self,elementInfo,value):
        element = self.findElement(elementInfo)
        element.send_keys(value)


    """清除文本"""
    def clearTextEdit(self, elementInfo):
        element = self.findElement(elementInfo)
        element.clear()


    # 断言方法
    def verification(self, Info, data):
        # 判断是是否相等
        # 用法        self.verification("元素",u"对比项")
        try:
            self.assertEqual(self.findElement(Info).text, data)
        except NoSuchElementException as msg:
            print (u"查找元素异常%s" % msg)

使用这个断言方法报对象没有属性,这个是什么原因导致的

最佳回复

对象内置有属性,另外一个就是返回 None.所以不能这样判断。
其实元素对象包裹在 try then except 即可。

共收到 5 条回复 时间 点赞

对象内置有属性,另外一个就是返回 None.所以不能这样判断。
其实元素对象包裹在 try then except 即可。

2楼 已删除

你的类和父类里面都没有 assert 方法,那你的 self.assert 从何而来,肯定报没有这个属性

8楼 已删除

得继承 unittest 才有

6楼 已删除
对 陈恒捷 回复

先导入 unittest 继承 unittest, 在引用 unittest.TestCase 这个方法
是这样思路吧

对 雨夜狂奔 回复

先导入 unittest 然后 class BrowserEngine(object,unittest.TestCase): 但用这个方法报错
class BrowserEngine(object,unittest.TestCase):
TypeError: Error when calling the metaclass bases
Cannot create a consistent method resolution
order (MRO) for bases TestCase, object

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册。