You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Appium+Pytest重构为页面对象模型后报TimeoutException错误求解

问题根因

你碰到的超时报错是两处遗漏导致的:

  1. 测试用例里只写了home.nav_to_details_page,没有加括号调用这个方法,等于跳转详情页的逻辑根本没执行,页面还停留在首页,自然找不到详情页的"Item Facts"元素,触发超时。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:39:02