Selenium 一个调用类问题

吴俊 · 2018年07月10日 · 最后由 徐旻 回复于 2018年07月10日 · 1456 次阅读

问题描述:public1.py 中写了一个类,下面有个调用浏览器的方法,public1.py 中写了一个登录的方法 但在 webtest1 同时引用这两个文件中的方法报错

public1.py 代码:

coding=utf-8

from selenium import webdriver

class BrowserEngine(object):
"""
定义一个浏览器引擎类,根据 browser_type 的值去,控制启动不同的浏览器,这里主要是 IE,Firefox, Chrome
"""
def init(self, driver):
self.driver = driver

browser_type = "Chrome" # maybe Firefox, Chrome, IE
def get_browser(self):
"""
通过 if 语句,来控制初始化不同浏览器的启动,默认是启动 Chrome
:return: driver
"""
if self.browser_type == 'Firefox':
driver = webdriver.Firefox()
elif self.browser_type == 'Chrome':
driver = webdriver.Chrome()
elif self.browser_type == 'IE':
driver = webdriver.Ie()
else:
driver = webdriver.Chrome()

driver.maximize_window()
driver.implicitly_wait(50)
driver.get("https://sso.dev.weixiuhui.cn/cas/login?service=https://sso.dev.weixiuhui.cn/sso_base/a/cas")

public.py 代码:#web 登录方法
def Login1(self):
self.driver.find_element_by_id("username").send_keys("15111111112")
# 输入密码
self.driver.find_element_by_id("password").send_keys("123456")
# 输入验证码
self.driver.find_element_by_id("captcha").send_keys("8888")
# 登录
self.driver.find_element_by_name("submit").click()

webtest1 脚本:

coding:utf-8

from selenium import webdriver
import unittest
from appProject.public import Login1
from appProject.public1 import BrowserEngine

class Login_Logout1(unittest.TestCase):

def setUp(self):
browserengine = BrowserEngine(self)
self.driver = browserengine.get_browser()

def test(self):
Login1(self)

def tearDown(self):
self.driver.quit()

if name == "main":
unittest.main()

报错信息:
[size=17.0667px] F:\Python27\python.exe "F:\PyCharm Community Edition 2016.3\helpers\pycharm\utrunner.py" F:\appiumDemo\appProject\cases\wentest1.py trueTesting started at 9:43 ...ErrorTraceback (most recent call last): File "F:\appiumDemo\appProject\cases\wentest1.py", line 16, in test Login1(self) File "F:\appiumDemo\appProject\public.py", line 59, in Login1 self.driver.find_element_by_id("username").send_keys("15111111112") AttributeError: 'NoneType' object has no attribute 'find_element_by_id'ErrorTraceback (most recent call last): File "F:\appiumDemo\appProject\cases\wentest1.py", line 13, in tearDown self.driver.quit() AttributeError: 'NoneType' object has no attribute 'quit'Process finished with exit code 0

[size=17.0667px] 请广大网友详细说明下这个是什么原因呢!

共收到 5 条回复 时间 点赞

排版改一下,代码用 代码块 包起来,这个看起来太难受了

对我的启发是: 之前都是用继承做的,从没用过组合;

虽然排版这么烂,看你错误大概是你get_browser()并没有返回任何东西,所以默认是None

get_browser() 没有返回 driver 吧

你定义的是 browser_type = "Chrome" # maybe Firefox, Chrome, IE

但是 def get_browser(self):
"""
通过 if 语句,来控制初始化不同浏览器的启动,默认是启动 Chrome
:return: driver
"""
if self.browser_type == 'Firefox':

但是在 get_browser 中你使用的是 self.browser_type

所以是你没有在 def init() 中定义 self.browser_type
当然不能初始化 browser 成功。

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