问题遇到的现象和发生背景
计算器网页网址可以正常跳转,到了点击数字按钮的地方浏览器就关了,然后报错.
自己练手的一个PO结构的计算器网址自动化练习,网址是:url = "http://cal.apple886.com/".然后报错说 AttributeError: 'NoneType' object has no attribute 'click'
问题相关代码,请勿粘贴截图
**这个是base.py **
from datetime import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
class Base:
#初始化方法
def __init__(self, driver):
self.driver = driver
def base_find_element(self, loc, timeout=30, poll=0.5):
WebDriverWait(self.driver, timeout=timeout, poll_frequency=poll).until(lambda x:x.find_element(*loc))
# 点击方法
def base_click(self, loc):
self.base_find_element(loc).click()
#元素输入方法
def base_input(self,loc,value):
#获取元素
el = self.base_find_element(loc)
#清空
el.clear()
el.send_keys(value)
#获取value值封装
def base_get_value(self,loc):
self.base_find_element(loc).get_attribute("value")
运行结果及报错内容
test_calc.py:31 (TestClac.test_add_clac_0)
a = (<test_calc.TestClac testMethod=test_add_clac_0>,)
@wraps(func)
def standalone_func(*a):
> return func(*(a + p.args), **p.kwargs)
..\..\venv\lib\site-packages\parameterized\parameterized.py:533:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_calc.py:35: in test_add_clac
self.clac.page_add_calc(a, b)
..\page\page_calc.py:37: in page_add_calc
self.page_click_num(a)
..\page\page_calc.py:11: in page_click_num
self.base_click(loc)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <computer.page.page_calc.PageCalc object at 0x000002C6FFEB0A90>
loc = ('css selector', '#simple1')
def base_click(self, loc):
> self.base_find_element(loc).click()
E AttributeError: 'NoneType' object has no attribute 'click'
page层
from selenium.webdriver.common.by import By
from computer import page
from computer.base.base import Base
class PageCalc(Base):
#点击数字方法
def page_click_num(self, num):
for n in str(num):
loc = By.CSS_SELECTOR, "#simple{}".format(n)
self.base_click(loc)
#点击加号
def page_click_add(self):
self.base_click(page.clac_add)
#点击等号
def page_click_eql(self):
self.base_click(page.clac_eql)
#获取结果方法
def page_get_value(self):
return self.base_get_value(page.clac_result)
#点击清屏
def page_click_clear(self):
self.base_click(page.clac_clear)
#截图
def page_get_image(self):
self.base_get_img()
#组装业务方法
def page_add_calc(self,a,b):
self.page_click_num(a)
self.page_click_add()
self.page_click_num(b)
self.page_click_eql()
test方法执行层
import unittest
from parameterized import parameterized
from computer.page.page_calc import PageCalc
from computer.base.get_driver import GetDriver
from computer.tool import read_json
def get_data():
data = read_json("clac.json")
print(data)
arrs = []
for data in data.values():
arrs.append((data['a'], data['b'], data['expect']))
return arrs
class TestClac(unittest.TestCase):
driver = None
# setupclass
@classmethod
def setUpClass(cls):
# 获取driver
cls.driver = GetDriver().get_driver()
# 初始化页面对象
cls.clac = PageCalc(cls.driver)
#teardownclass
@classmethod
def tearDownClass(cls):
GetDriver.quit_driver()
#测试加法方法
@parameterized.expand([(1,2,3)])
#调用page页面下的总方法
def test_add_clac(self, a, b, expect):
self.clac.page_add_calc(a, b)
print("预期结果为", expect, "实际结果为", self.clac.page_get_value())
try:
#断言
self.assertEqual(self.clac.page_get_value(),str(expect))
except:
#截图
self.clac.page_get_image()
raise
我的解答思路和尝试过的方法
报错:'NoneType' object has no attribute 'click'
对应的base层 page层,执行test层我检查好多遍,还是不知道哪里出问题了.计算器网页网址可以正常跳转,到了点击数字按钮的地方浏览器就关了,然后报错.