Appium+Pytest重构为页面对象模型后报TimeoutException错误求解
问题根因
你碰到的超时报错是两处遗漏导致的:
- 测试用例里只写了
home.nav_to_details_page,没有加括号调用这个方法,等于跳转详情页的逻辑根本没执行,页面还停留在首页,自然找不到详情页的"Item Facts"元素,触发超时。 home_view.py文件里没有导入依赖的MobileBy和WebDriverWait类,就算调用了方法也会先报名称未定义的错误。
修复步骤
- 第一步:修改
test_detail_page.py里的方法调用,给nav_to_details_page加上括号 - 第二步:给
home_view.py补全缺少的导入语句
修复后代码
1. home_view.py 完整代码
# 补全缺失的导入 from appium.webdriver.common.mobileby import MobileBy from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class HomeView(object): GEM_ITEM = (MobileBy.XPATH, '//android.widget.TextView[@index=2]') def __init__(self, driver): self.driver = driver def nav_to_details_page(self): wait = WebDriverWait(self.driver, 10) wait.until(EC.presence_of_element_located(self.GEM_ITEM)).click()
2. test_detail_page.py 修正后代码
from appium.webdriver.common.mobileby import MobileBy from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from views.home_view import HomeView def test_item_details_page(driver): home = HomeView(driver) # 这里加括号调用方法,原来漏了 home.nav_to_details_page() wait = WebDriverWait(driver, 10) assert wait.until(EC.presence_of_element_located((MobileBy.XPATH, '//android.widget.TextView[@text="Item Facts"]'))).text == "Item Facts"
修改完成后重新运行即可正常执行,逻辑和你重构前的代码完全一致。
内容的提问来源于stack exchange,提问作者Yani Rodriguez
相关产品推荐
相关产品推荐

