Appium等待元素出现

使用场景:在某些加载或者是需要一些耗时的操作之后才能获取到的控件

python:

def wait_element(driver, time, element_by, element, msg):
        """
        等待元素出现
        :param driver: driver
        :param time: 等待时间
        :param element_by: 元素类型
        :param element: 元素关键字
        :param msg: 输出信息
        :return:
        """
        WebDriverWait(driver, time).\
            until(expected_conditions.presence_of_element_located((element_by, element)),msg)

#调用
wait_element(self.deriver, 10, By.ID, "com.xxx.xxx.ceshi:id/main_select_index_rb", "没有发现xxxx...")

java:

public boolean waitForAeTextAppear(String text, int timeOutInSeconds) {
	try {
		WebDriverWait wait = new WebDriverWait(mDriver, timeOutInSeconds);
		wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(String.format("//*[@text='%s']", text))));
		return true;
	} catch (Exception e) {
		return false;
	}
}

这里随便写了下,具体的一些使用场景还需自行封装

参考:https://testerhome.com/topics/13620

https://blog.youkuaiyun.com/meyoung01/article/details/43056069



### 关于Appium中的元素等待方法及最佳实践 #### 隐式等待 隐式等待会告诉 WebDriver 查找元素时轮询 DOM 一段时间。默认设置为0秒,一旦设置了这个时间,它将在整个WebDriver生命周期内有效。 ```python driver.implicitly_wait(10) # seconds ``` 这种方式简单易用但是不够灵活,因为无论何时都会强制等待指定的时间长度即使页面上的元素早已加载完毕[^1]。 #### 显式等待 显式等待允许代码在一个特定条件下暂停执行直到该条件成立或超时发生。这提供了更精确控制的能力,并且可以减少不必要的延迟。常见的做法是使用`WebDriverWait`配合`expected_conditions`模块来定义具体的等待逻辑: ```python from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "myDynamicElement")) ) ``` 上述例子展示了如何配置最长等待时间为10秒并持续尝试定位ID为`"myDynamicElement"`的元素直至找到为止;如果超过设定时限仍未发现目标,则抛出异常[^2]。 对于更加复杂的场景比如动态变化的内容或者动画效果结束后的操作,还可以自定义预期条件函数来进行处理。 #### Fluent Wait (流畅等待) Fluent Wait 提供了一种更为精细的方式来管理等待行为,能够更好地适应不同的网络状况和应用响应速度差异较大的情况。可以通过调整polling interval(轮询间隔)以及忽略某些类型的异常来自定义等待策略: ```python wait = WebDriverWait(driver, timeout=30, poll_frequency=5, ignored_exceptions=[NoSuchElementException]) element = wait.until(EC.element_to_be_clickable((By.XPATH,"//div"))) ``` 这段代码表示最大等待30秒,每隔5秒检查一次是否存在可点击状态下的XPath路径匹配项,期间遇到找不到元素的情况不会立即终止而是继续重试[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值