【发布时间】:2021-01-04 19:48:52
【问题描述】:
我正在构建一个自动化测试,以查找 WP 插件中任何可能的死链接。为此,我有两个辅助函数。
第一个启动 Selenium 网络驱动程序:
@pytest.fixture(scope='session')
def setup():
d = webdriver.Firefox()
site = os.getenv('TestSite')
d.get(site)
login = d.find_element_by_id('user_login')
d.implicitly_wait(5)
user, pw = os.getenv('TestUser'), os.getenv('TestPw')
d.find_element(By.ID, 'user_login').send_keys(user)
d.find_element(By.ID, 'user_pass').send_keys(pw)
d.find_element(By.ID, 'wp-submit').click()
yield d, site
d.quit()
第二个读取一个 JSON 文件,挑选出文件中的每一页,然后将其交给第三个函数:
def page_generator() -> Iterator[Dict[str, Any]]:
try:
json_path = '../linkList.json'
doc = open(json_path)
body = json.loads(doc.read())
doc.close()
except FileNotFoundError:
print(f'Did not find a file at {json_path}')
exit(1)
for page in body['pages']:
yield page
第三个功能是测试的香饽饽,遍历页面,寻找每个链接。我的目标是参数化每个页面,我的函数标题目前看起来像......
@pytest.mark.parametrize('spin_up, page', [(setup, p) for p in page_generator()])
def test_links(spin_up, page):
driver, site = spin_up
# Do all the things
不幸的是,运行这个结果是TypeError: cannot unpack non-iterable function object。将yield d, site 粘贴在某种循环中以将函数转换为可迭代的唯一选择是,还是有办法告诉test_links 迭代地提取与其spin_up 值相同的设置函数?
【问题讨论】:
标签: python selenium pytest generator fixtures