我创建了一个帮助程序类SignUpSetUp
,以便登录我的应用程序而不是重用代码。在这个类中,我有一个私有函数waitForElementToAppear
来等待测试套件中的元素出现。但是,使用此功能时会产生错误:
无法转换类型' XCUIElement'的值预期参数类型' SignUpSetUp'
为什么会这样,我该如何解决?
我的代码是:
import XCTest
class SignUpSetUp: XCTestCase {
var systemAlertMonitorToken: NSObjectProtocol? = nil
static let signUpApp = XCUIApplication()
static let app = XCUIApplication()
class func signUpApp() {
// XCUIApplication().launch()
//signUpSetUp.launch()
sleep(2)
let element = app.buttons["Enable notifications"]
if element.exists {
element.tap()
}
sleep(3)
let notifcationsAlert = self.app.alerts.buttons["OK"]
if notifcationsAlert.exists{
notifcationsAlert.tap()
notifcationsAlert.tap()
}
sleep(2)
waitForElementToAppear(self.app.tabBars.buttons["Nearby"])
let nearbyTab = self.app.tabBars.buttons["Nearby"]
if nearbyTab.exists {
nearbyTab.tap()
}
sleep(2)
let enableLocation = self.app.buttons["Enable location"]
if enableLocation.exists {
enableLocation.tap()
}
let allowLocation = self.app.alerts.buttons["Allow"]
if allowLocation.exists {
allowLocation.tap()
allowLocation.tap()
}
sleep(2)
//waitForElementToAppear(self.app.tabBars.buttons.elementBoundByIndex(4))
let settingsButton = self.app.tabBars.buttons.elementBoundByIndex(4)
XCTAssert(settingsButton.exists)
settingsButton.tap()
let signUpButton = self.app.tables.staticTexts["Sign Up"]
if signUpButton.exists {
signUpButton.tap()
}
}
private func waitForElementToAppear(element: XCUIElement,
file: String = #file, line: UInt = #line) {
let existsPredicate = NSPredicate(format: "exists == true")
expectationForPredicate(existsPredicate,
evaluatedWithObject: element, handler: nil)
waitForExpectationsWithTimeout(5) { (error) -> Void in
if (error != nil) {
let message = "Failed to find \(element) after 5 seconds."
self.recordFailureWithDescription(message,
inFile: file, atLine: line, expected: true)
}
}
}
答案 0 :(得分:2)
您的问题是您正在从类方法调用实例方法。
waitForElementToAppear
是一个实例方法,但signUpApp
是一个类方法。为了使代码正常工作,您需要将两者对齐。从class
的签名中删除signUpApp
,并从您的两个媒体资源中删除static
,并将对self.app
的引用更改为app
。
let signUpApp = XCUIApplication()
let app = XCUIApplication()
func signUpApp() { ... }
除非你确实希望方法在类/静态级别上,否则你可以在另一个方向上对齐。
就最佳实践而言,没有必要拥有两个属性来保存XCUIApplication
的实例 - 只需拥有一个并使用它,因为它们都将以相同的方式运行。