将光标放在 UITest 下 UITextView 的末尾
Posted
技术标签:
【中文标题】将光标放在 UITest 下 UITextView 的末尾【英文标题】:Place cursor at the end of UITextView under UITest 【发布时间】:2016-07-22 09:38:45 【问题描述】:这就是我在 UITests 中清除 UITextFields
和 UITextViews
的方式。
extension XCUIElement
func clear()
tap()
while (value as! String).characters.count > 0
XCUIApplication().keys["delete"].tap()
使用示例:
descriptionTextView.type("Something about Room.")
descriptionTextView.clear()
如果我运行 UITests,它总是在 UITextView 的开头点击。
最后怎么点击?
【问题讨论】:
【参考方案1】:您可以点击右下角将光标置于文本视图的末尾。
此外,您可以通过准备一个包含多个XCUIKeyboardKeyDelete
的deleteString
来提高删除速度,该XCUIKeyboardKeyDelete
可以一次擦除整个文本字段。
extension XCUIElement
func clear()
guard let stringValue = self.value as? String else
XCTFail("Tried to clear and enter text into a non string value")
return
let lowerRightCorner = self.coordinateWithNormalizedOffset(CGVectorMake(0.9, 0.9))
lowerRightCorner.tap()
let deleteString = [String](count: stringValue.characters.count + 1, repeatedValue: XCUIKeyboardKeyDelete)
self.typeText(deleteString.joinWithSeparator(""))
【讨论】:
我面临同样的问题,我正在将文本字段检查到 safari 浏览器中。但这个解决方案对我不起作用。你能帮我计算元素的精确向量点吗?【参考方案2】:这是适用于 Swift 5.3 (Xcode 12) 的 Tomas Camin 解决方案:
extension XCUIElement
public func clear()
guard let stringValue = self.value as? String else
XCTFail("Tried to clear and enter text into a non string value")
return
let lowerRightCorner = self.coordinate(withNormalizedOffset: CGVector(dx: 0.9, dy: 0.9))
lowerRightCorner.tap()
let deleteString = String(repeating: XCUIKeyboardKey.delete.rawValue, count: stringValue.count)
self.typeText(deleteString)
【讨论】:
第一个解决方案在没有本地化和奇怪的 tap() 行为的情况下工作。谢谢以上是关于将光标放在 UITest 下 UITextView 的末尾的主要内容,如果未能解决你的问题,请参考以下文章