Swift 枚举大小写的错误原始值必须是文字
我正在尝试为swift中的XUITEST构建一个UI元素定位器策略,但我的代码片段有问题。此策略将用于所有页面类,并将减少UI测试中的大量重复代码 我们试图在测试中实现一个页面对象模型,这样我们就可以清楚地实现页面结构和页面上的相应操作。我们有两个具有相同功能的不同应用程序,但元素ID可能会在某些页面上更改 e、 g,应用程序A的登录按钮id将是aLoginButton,应用程序B的id将是BloginButton 我曾经考虑过一个如下所示的实现,但它没有什么问题Swift 枚举大小写的错误原始值必须是文字,swift,Swift,我正在尝试为swift中的XUITEST构建一个UI元素定位器策略,但我的代码片段有问题。此策略将用于所有页面类,并将减少UI测试中的大量重复代码 我们试图在测试中实现一个页面对象模型,这样我们就可以清楚地实现页面结构和页面上的相应操作。我们有两个具有相同功能的不同应用程序,但元素ID可能会在某些页面上更改 e、 g,应用程序A的登录按钮id将是aLoginButton,应用程序B的id将是BloginButton 我曾经考虑过一个如下所示的实现,但它没有什么问题 枚举大小写的原始值必须是文字。
类基本页{
func qcom_rcom(qcomId:String,rcomId:String)->String{
如果是QCOM
返回qcomId
其他的
返回rcomId
}
}
类登录页面:BasePage{
重写init(){
super.init()
打印(Locators.menuItemName.identifier)
}
}
扩展登录页{
枚举定位器:字符串,定位器策略{
case menuItemName=qcom_rcom(“aLoginButton”、“bLoginButton”)//此处获取错误
}
}
公共协议定位策略{
变量标识符:字符串{get}
}
公共扩展定位器策略,其中Self:RawRepresentable,Self.RawValue==String{
变量标识符:字符串{
返回原始值
}
}
LoginPage.init()
预期:如果UIelement id在两个不同的应用程序上不同,则enum类案例需要根据需要保存元素的两组数据。我不想创建两个单独的case项aMenuItemName和bMenuItemName来解决此问题。一种方法是使用预处理器指令 比如说,
enum Locators: String, LocatorStrategy {
#if QCOM
case menuItemName = "aLoginButton"
#elseif RCOM
case menuItemName = "bLoginButton"
#endif
}
然后,您可以在生成设置中更改它是QCOM还是RCOM:
什么是
QCOM
?它是编译时常量吗?这个错误消息有什么不清楚的地方qcom\u rcom
是一个函数,而不是一个文本。例如,“aLoginButton”
是一个文本。由于您是Swift新手,请遵守命名约定,即函数和变量是camelCased而不是snake_cased@sweeperyes QCOM是一个编译时常量,用于查看正在测试的应用程序,并将相应地返回id。我知道这是一个函数,但正如我提到的,有时我需要返回一个字符串文字或其他基于正在测试的应用程序。我想在case中调用一个方法,它将为我完成这项工作,这样我就可以使用单个case项本身。我将用camelCase更新我的代码谢谢:)