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() 没有返回任何东西,这意味着它返回了NoneNone,正如错误消息所说,不可迭代。

我不清楚setUp() 应该返回什么。很明显,一个列表或一个迭代器,但是是什么?浏览器?设置?我没有看到任何类似的东西。

【讨论】:

在工作示例中,_browsers 打开 chrome 和 firefox。在损坏的示例中,setUp 应该打开应用程序。 好的...好吧,该代码与您要询问的代码完全不同...显然它不适用于您要执行的操作,或者您会使用它。发帖的目的是什么? 因为它在概念上很相似。

以上是关于TypeError: 'NoneType' 对象不可迭代,使用带有 Selenium/Appium 的页面对象框架的主要内容,如果未能解决你的问题,请参考以下文章

Anvil 错误:TypeError:“NoneType”对象不可下标

TypeError:“NoneType”对象在 Python 中不可迭代

TypeError:调用键函数时“NoneType”对象不可迭代

运行测试时突然出现“TypeError:'NoneType'对象不可迭代

在执行并行 ssh 时获取“TypeError:'NoneType' 对象不可迭代”

Python:Concurrent.Futures 错误 [TypeError:'NoneType' 对象不可调用]