TypeError:使用带有Selenium / Appium的Page Object Framework,'NoneType'对象不可迭代

时间:2013-07-18 20:28:26

标签: python ios selenium appium

运行以下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设备上运行此unittest的setUp。 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 = []

我正在尝试使用Page Object Model框架来实现这一点,以便可以抽象页面上的元素。

编辑:这是使用浏览器代替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)

2 个答案:

答案 0 :(得分:0)

您正在尝试迭代setUp()方法的返回值:

for browser in webdriver_wrapper().setUp():

(错误消息显示for setUp in webdriver_wrapper().setUp(): ...不知道为什么会有差异。也许您粘贴的代码与您实际运行的代码不同。但无论如何,原因都是相同的。)< / p>

问题是setUp()没有返回任何内容,这意味着它返回None。正如错误消息所述,None不可迭代。

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

答案 1 :(得分:0)

您的setUp函数不返回任何内容(即:无),然后您编写:

for browser in webdriver_wrapper().setUp():

应该迭代setUp的结果......一个人不能遍历None。至少返回空列表。