TypeError: 'NoneType' 对象不可迭代,使用带有 Selenium/Appium 的页面对象框架
Posted
技术标签:
【中文标题】TypeError: \'NoneType\' 对象不可迭代,使用带有 Selenium/Appium 的页面对象框架【英文标题】:TypeError: 'NoneType' object is not iterable, using the Page Object Framework with Selenium/AppiumTypeError: 'NoneType' 对象不可迭代,使用带有 Selenium/Appium 的页面对象框架 【发布时间】:2013-07-17 23:34:04 【问题描述】:运行以下 PyUnit 测试:
import unittest #imports unit test/ability to run as pyunit test
from page_objects.webdriver_wrapper import webdriver_wrapper
from page_objects.home import home
from page_objects.inbook import inbook
from page_objects.myebooks import myebooks
from page_objects.login import login
import time
class regression(unittest.TestCase):
def regression(self, webd_wrap):
page_login = login(webd_wrap)
page_login.secure_login()
def test_regression(self): #running x as a unit test
for browser in webdriver_wrapper().setUp():
self.regression(webdriver_wrapper(browser))
print "Module Complete", __name__
if __name__ == "__main__":
unittest.main()
我收到以下错误:
ERROR: test_regression (mobile_testing.regression_test.regression)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/Zola/Documents/workspace/com.zolamobile.eviltest/mobile_testing/regression_test.py", line 24, in test_regression
for setUp in webdriver_wrapper().setUp():
TypeError: 'NoneType' object is not iterable
webdriver_wrapper 是一个库模块,其中包含要在 ios 设备上的此单元测试上运行的 setUp。设置看起来像这样:
def setUp(self):
# set up appium
success = True
app = "com.zolabooks.zolareader"
app = os.path.abspath(app)
self.driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities=
'browserName': 'iOS',
'platform': 'Mac',
'version': '6.1',
'ipa': app
)
self._values = []
我正在尝试使用页面对象模型框架使其工作,以便可以抽象页面上的元素。
编辑:这是使用浏览器而不是 iOS 的 selenium 工作代码:
def test_addtolist_notsignedin_modal(self): #running x as a unit test
for browser in webdriver_wrapper._browsers:
self.add_to_list_notsignedin_modal_test(webdriver_wrapper(browser))
其中 _browsers 定义为:
_browsers = ["chrome", "firefox"]
def open_chrome(self):
self._driver = webdriver.Chrome('/Users/Jay/Downloads/chromedriver')
self._driver.implicitly_wait(10)
self.wait = WebDriverWait(self._driver, 10)
def open_firefox(self):
self._driver = webdriver.Firefox()
self._driver.implicitly_wait(10)
self.wait = WebDriverWait(self._driver, 10)
【问题讨论】:
安装程序不应该返回一些东西吗? 【参考方案1】:你的setUp
函数什么都不返回(即:无)然后你写:
for browser in webdriver_wrapper().setUp():
它应该遍历setUp
的结果...不能遍历None
。至少返回空列表。
【讨论】:
【参考方案2】:您正在尝试迭代您的 setUp()
方法的返回值:
for browser in webdriver_wrapper().setUp():
(错误信息显示for setUp in webdriver_wrapper().setUp():
...不知道为什么会有差异。也许您粘贴的代码与您实际运行的代码不同。但无论如何原因都是一样的。)
问题是setUp()
没有返回任何东西,这意味着它返回了None
。 None
,正如错误消息所说,不可迭代。
我不清楚setUp()
应该返回什么。很明显,一个列表或一个迭代器,但是是什么?浏览器?设置?我没有看到任何类似的东西。
【讨论】:
在工作示例中,_browsers
打开 chrome 和 firefox。在损坏的示例中,setUp 应该打开应用程序。
好的...好吧,该代码与您要询问的代码完全不同...显然它不适用于您要执行的操作,或者您会使用它。发帖的目的是什么?
因为它在概念上很相似。以上是关于TypeError: 'NoneType' 对象不可迭代,使用带有 Selenium/Appium 的页面对象框架的主要内容,如果未能解决你的问题,请参考以下文章
Anvil 错误:TypeError:“NoneType”对象不可下标
TypeError:“NoneType”对象在 Python 中不可迭代
TypeError:调用键函数时“NoneType”对象不可迭代
运行测试时突然出现“TypeError:'NoneType'对象不可迭代