已经调通,为避免泄露公司地址,关闭帖子
干嘛要把 self 传进去?
另外代码用 markdown 改一下吧, 这种代码格式大牛们是不屑于看的
这个抛错是说 找不到这个元素。
下面这段是代码逻辑的问题
self.driver = driver
self.browser
你这个过度封装了吧,是想把 self.driver.get_browser()
下面函数里 你上面 self.driver 不都变成成员变量了吗。。。又用回右边的变量
复制楼主的代码修改如下
class BrowserEngine(object):
def __init__(self,driver):
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
..........
在调用就没问题了
然后 setUp 不要用 @classmethod,建议查看一下 setUp 和 setUpClass
建议你不要使用封装的 findelement 试试,太乱没看懂你的封装。
你可以试试
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait as WT
用这个发代码
我没有写过 object 类,我直接一个文件继承 unittest,这个文件里写好了自动化执行的操作,初始化 driver,然后测试用例里面再继承我自己写的类,再断言
def __init__(self, driver):
self.driver = driver
既然 driver 是通过 get_browser 设置 driver,可以把初始化的 driver 改一下默认值
def __init__(self, driver=None):
self.driver = driver
def setUpClass(self):
#browserengine = BrowserEngine(self)
# self 是 单元测试的示例,相当于把 driver 设置成单元测试类的示例了。
# 改为
self.browserengine = BrowserEngine()
self.driver = browserengine.get_browser()
如果不是对 unittest
很熟悉,不建议用 setup 或 init 来初始化,可以在另一个文件中,生成 BrowserEngine 实例,在测试类中 import 这个实例, 简单例子
# commonTools1
class BrowserEngine():
pass
browserengine = BrowserEngine()
# 测试类
from appProject.commonTools1 import browserengine
就是上面的代码
按你的方法写了,和以前是一样报 AttributeError: 'WebDriver' object has no attribute 'find' 我这封装有问题出在哪里 呢
find.element_by_xpath
写错了,是 find_element_by_xpath
TypeError: object of type 'WebElement' has no len() elementInfo 是这个重复吗