首页 > 解决方案 > 我需要在 appium-Python 中使用 WebDriverWait,并且需要将“ios_predicate”作为定位器传递

问题描述

使用 selenium 和 appium 在 iOS 移动自动化中工作,我需要对 Predicate 或 class_chain 使用显式等待,因为 ExpectedConditions 将只接受定位器,我如何传递我的 Predicate 或 class_chain,它在我的 EC 条件中保存为字符串

我需要传递一个字符串作为定位器,因为我尝试过但它不接受。

我努力了:

from selenium.webdriver.support import expectedconditions as EC

string_predicate = "type == 'XCUIElementTypeStaticText' AND value BEGINSWITH[c] 'Hi'"

wait = WebDriverWait(driver, 20)

waiting_for = wait.until(EC.visibility_of_element_located(driver.find_element_by_ios_predicate(string_predicate)))

我知道EC.visibility_of_element_located()应该只接受默认定位器,如 ID、XPATH 等。但我需要传递一个保存为 Predicate 或 class_chain 的字符串。这完全阻碍了我的工作。

请帮忙?

标签: selenium-webdriverappiumwebdriverwaitpython-appium

解决方案


from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

string_predicate = (MobileBy.IOS_PREDICATE, "type == 'XCUIElementTypeStaticText' AND value BEGINSWITH[c] 'Hi'")
string_id = (MobileBy.ID, "Hi")

wait = WebDriverWait(driver, 20)
wait.until(EC.visibility_of_element_located(string_predicate))
wait.until(EC.visibility_of_element_located(string_id))

推荐阅读