我正在尝试为我们的XCUITests迅速构建UI元素定位器策略,并对我的代码段有麻烦。此策略将在所有页面类中使用,并将减少UI测试中的大量重复代码。
我们正在尝试在测试中实现页面对象模型,以便我们可以清晰地实现Page结构以及页面上的相应操作。我们有两个具有相同功能的不同应用程序,但元素ID可能在某些页面上更改。
例如,应用A的登录按钮的ID为aLoginButton,而应用B的ID为bLogin按钮。
我考虑过下面显示的实现,但是问题很少。
在下面的代码中,LocatorStrategy将位于其自己的文件中,并将在各个页面扩展中使用以保存/返回UI元素位置值
P.S我是Swift的新手。
class BasePage {
func qcom_rcom(qcomId: String , rcomId: String) -> String {
if QCOM
return qcomId
else
return rcomId
}
}
class LoginPage : BasePage {
override init() {
super.init()
print(Locators.menuItemName.identifier)
}
}
extension LoginPage {
enum Locators: String, LocatorStrategy {
case menuItemName = qcom_rcom("aLoginButton", "bLoginButton") // getting error here
}
}
public protocol LocatorStrategy {
var identifier: String { get }
}
public extension LocatorStrategy where Self: RawRepresentable, Self.RawValue == String {
var identifier: String {
return rawValue
}
}
LoginPage.init()
Expected:如果两个不同应用程序上的UIelement id不同,则枚举类需要根据需要为元素保留两组数据。我不想创建两个单独的案例项目aMenuItemName和bMenuItemName来解决此问题。