self = <tests.petclinic.page.owner_page.OwnerPage object at 0x0000020F3E401300> lastname = 'balck' def search_none(self,lastname) -> str: # ... > if not owners: E NameError: name 'owners' is not defined ..\page\owner_page.py:33: NameError
时间: 2024-03-21 15:43:52 浏览: 57
这个错误意味着在 `search_none` 方法中,你使用了一个未定义的变量 `owners`。你必须首先定义它,然后才能在 `if not owners:` 语句中使用它。
你可以尝试在 `search_none` 方法的开头添加以下代码:
```
def search_none(self, lastname) -> str:
owners = self.find_owners(lastname)
# any other existing code here
```
这样,你就定义了一个名为 `owners` 的变量,并将其设置为 `self.find_owners(lastname)` 的结果。这意味着在你的 `if not owners:` 语句中,`owners` 变量将包含一个列表,其中包含所有匹配的所有者。如果列表为空,该语句将评估为 True,否则将评估为 False。
你需要确保在 `search_none` 方法的其余部分正确使用该变量,或者在需要时进行必要的修改。
相关问题
self = <tests.petclinic.test_owner.test_onwer_search.TestOwnerSearch object at 0x0000020ED2C4C5B0> keyword = 'balck' @pytest.mark.parametrize('keyword',[ 'balck', 'avis' ]) def test_search_none(self,keyword): # 搜索 # owner_list = self.owner_page.search(keyword) msg = self.owner_page.search_none(keyword) > assert 'No owners' in msg E TypeError: argument of type 'NoneType' is not iterable test_onwer_search.py:44: TypeError
这个错误是因为`msg`为`None`,而在`assert`语句中尝试迭代`None`类型的值,导致了`TypeError`异常。这个问题可能是由于`self.owner_page.search_none(keyword)`返回了`None`,而不是预期的字符串类型。
可以在`self.owner_page.search_none(keyword)`方法中打印一些调试信息,以便查看返回的值是否为`None`。例如:
```python
def search_none(self, keyword):
self.search(keyword)
try:
WebDriverWait(self.driver, 5).until(EC.presence_of_element_located((By.XPATH, "//tbody")))
except TimeoutException:
return "No owners"
else:
return None
```
然后,您可以在测试函数中打印`msg`的值,查看它是否为`None`。如果是,则需要在`search_none`方法中进行调整,以确保它返回预期的字符串类型。
test_onwer_search.py:35 (TestOwnerSearch.test_search_none[avis]) self = <tests.petclinic.test_owner.test_onwer_search.TestOwnerSearch object at 0x00000167CA97D2D0> keyword = 'avis' @pytest.mark.parametrize('keyword',[ 'balck', 'avis' ]) def test_search_none(self,keyword): msg = self.owner_page.search_none(keyword) > assert 'No owners' in msg E TypeError: argument of type 'NoneType' is not iterable test_onwer_search.py:42: TypeError
这个错误意味着在第35行中的 `self.owner_page.search_none(keyword)` 返回了 None,而不是一个可以迭代的对象。因此,在第42行中的 `'No owners' in msg` 中引发了 TypeError。你需要检查 `search_none` 方法是否正确地返回了一个字符串,或者在测试用例中添加必要的检查以避免这种情况。
如果 `search_none` 方法返回 None,则你需要检查该方法的实现并确保它始终返回一个字符串。你可以尝试在该方法的末尾添加以下代码:
```
def search_none(self, lastname) -> str:
# your existing code here
if not owners:
return 'No owners'
# any other existing code here
return ''
```
这样,如果无论什么原因导致该方法没有返回字符串,它也不会返回 None,并且测试用例将不会引发 TypeError。
或者,你可以在测试用例中添加一个检查以避免 TypeError:
```
@pytest.mark.parametrize('keyword',[
'balck',
'avis'
])
def test_search_none(self, keyword):
msg = self.owner_page.search_none(keyword)
if msg is not None:
assert 'No owners' in msg
```
这个测试用例添加了一个条件语句,用于检查返回的消息是否为 None。如果是 None,则测试用例将直接通过。否则,它将检查消息是否包含字符串 "No owners"。这样,即使 `search_none` 方法返回 None,测试用例也不会引发 TypeError。
阅读全文