乙醚 large avatar
测试学习小组  ›  python selenium

用乙醇的basepage感觉每次都要实例化webdriver,觉得麻烦。写了下面的一个类,把driver封装起来,但不明白实现原理,为什么调用any_driver这个方法要入参self。

By 乙醚 at 一年前 , 887 次浏览

问题代码: self.dr = My_Driver.any_driver(self)
如果这段代码不传self进去就报一下错误,执行失败。
self.dr = My_Driver.any_driver()
TypeError: any_driver() missing 1 required positional argument: 'self'
为什么一定要传个参数进去呢?我感觉可以不用传进去。
麻烦老师解答一下。

#package name : my_driver
from selenium import webdriver

class My_Driver(object):
def any_driver(self,browser = 'chrome'):
if browser == "firefox" or browser == "ff":
return webdriver.Firefox()
elif browser == "chrome":
return webdriver.Chrome()
elif browser == "internet explorer" or browser == "ie":
return webdriver.Ie()
elif browser == "opera":
return webdriver.Opera()
elif browser == 'edge':
return webdriver.Edge()
else:
raise NameError(
"Not found %s browser,You can enter 'ie', 'ff', 'opera', 'edge', 'chrome' or 'chrome_headless'." % browser)

#package name: logincase
from Pages.TheActions.LoginAction import Login_Action
from my_driver import My_Driver
import unittest
from time import sleep
import time

按照一定格式获取当前时间

now = time.strftime("%Y-%m-%d %H_%M_%S ")

class LoginCase(unittest.TestCase):

def setUp(self):
print('before test')
self.dr = My_Driver.any_driver(self)
self.dr.maximize_window()

#普通用户登陆成功
def test_login_success_admin(self):
username = 'admin'
password = '123456'
login_action=Login_Action(self.dr,"/member/login")
loginhome_page=login_action.login(username,password)
sleep(5)
try:
print(loginhome_page.greeting_link().text)
self.assertTrue(username in loginhome_page.greeting_link().text)
self.assertTrue('main' in self.dr.current_url)
except AssertionError as msg:
print(msg,u'登陆失败')
filename = './error_png/' + now + 'test_login_success_admin.png'
self.dr.get_screenshot_as_file(filename)


def tearDown(self):
print('after,every test')
self.dr.close()

if name =='main':
# unittest.main()

#调试
run = input()
if run == '1':
unittest.main()
else:
suite = unittest.TestSuite()
suite.addTest(LoginCase('test_login_success_regular_member'))
runner = unittest.TextTestRunner()
runner.run(suite)

# unittest.main()

问题代码: self.dr = My_Driver.any_driver(self)
如果这段代码不传self进去就报一下错误,执行失败。
self.dr = My_Driver.any_driver()
TypeError: any_driver() missing 1 required positional argument: 'self'
为什么一定要传个参数进去呢?我感觉可以不用传进去。
麻烦老师解答一下。

5 回复
乙醇 medium avatar
#1 - 一年前
乙醇

是有点麻烦,你可以用一下webium,这是另一种po的实现,封装的层次比我那个要深,不过用起来还是比较方便的。

乙醚 medium avatar
#2 - 一年前
乙醚

现在我用习惯了你的basepage 想在你的基础上做修改,能给我点建议吗?

乙醇 medium avatar
#3 - 一年前
乙醇

能不能把代码格式化一下?现在看着有点累

乙醚 medium avatar
#4 - 一年前
乙醚

弄懂了这个问题了。开发给我解决了。

乙醚 medium avatar
#5 - 一年前
乙醚

谢谢 乙醇大哥

测试学习小组 — 软件测试学习讨论区
现在注册
已注册用户请 登入
内容分享

欢迎关注我们的公众号: 测试圈TC


小贴士

你的问题在测试教程网中能找到答案