Я пытаюсь в кратчайшие сроки создать стратегию поиска элементов пользовательского интерфейса для наших XCUITests и испытываю проблемы с моим фрагментом кода. Эта стратегия будет использоваться во всех классах страниц и позволит уменьшить количество повторяющегося кода в наших тестах пользовательского интерфейса.
Мы пытаемся реализовать объектную модель страницы в наших тестах, чтобы у нас была четкая реализация структуры страницы и соответствующих действий на странице. У нас есть два разных приложения с одинаковой функциональностью, но идентификатор элемента может измениться на некоторых страницах.
Например, идентификатор кнопки входа в приложение А будет aLoginButton, а идентификатор приложения B будет кнопка bLogin.
Я подумал о реализации, которая показана ниже, но у меня мало проблем с ней.
- Необработанное значение для enum case должно быть литералом. Я понимаю, что возвращаемое значение перечисления должно быть строковым или целочисленным литералом, и это поднимает мой вопрос № 2.
- Я правильно делаю? Есть лучший способ сделать это ?
В приведенном ниже коде LocatorStrategy будет находиться в своем собственном файле и будет использоваться в отдельных расширениях страницы для хранения / возврата значений местоположения элемента пользовательского интерфейса
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()
Ожидается: регистр класса enum должен содержать два набора данных для элемента по мере необходимости, если идентификатор UIelement отличается в двух разных приложениях. Я не хочу создавать два отдельных элемента дела aMenuItemName и bMenuItemName для решения этой проблемы.