selenium-webdriver - 我需要在 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 的字符串。这完全阻碍了我的工作。
请帮忙?
解决方案
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))
推荐阅读
- c++ - C++ 中的内存问题(跺脚?)
- mysql - 使用 phpmyadmin 的 GUI 与使用 alter table 更改字段类型会产生不同的行为
- css - 无法以角度更改封装类
- c++ - 只有当 bool 设置为 true 时,有没有办法 PlaySound(PlaySoundA c++ 函数)?
- spring-boot - Swagger2 和 JavaDoc 的区别
- printing - 如何使用 Epson TM-T20 打印机打印二维码?
- android - Android Kotlin : Room with corountines : 如何在更新 UI 之前创建 db、预置数据和从 db 值填充地图
- avro - JDBC Kafka 连接器中的模式演变如何工作?
- json - 在 T-SQL 中通过 OpenJSON 遍历 JSON
- reactjs - 如何在 React Hooks 中正确管理订单数据的接收和 DOM 更新