Идентификация объектов, созданных с помощью фреймворка, а не созданных с помощью исходного HTML
У меня есть сценарий, когда я не могу определить некоторые из моих объектов на странице. У них нет уникального идентификатора (например, имя, класс, идентификатор). Наша команда разработчиков использует инфраструктуру JS, которая генерирует модели, представления, контроллеры и т. Д. И динамически присваивает идентификаторы. Также есть много дочерних представлений, которые динамически генерируются с помощью динамических идентификаторов.
Поэтому я не могу использовать идентификаторы, так как они меняются. Я не хочу использовать xpath, так как это не отраслевой стандарт. Я попытался css-селектор, но он дает мне длинный путь, не уверен, что это правильный путь.
Я хотел бы узнать от всех вас, является ли правильной практикой добавление дополнительных атрибутов к объекту в коде разработки для целей тестирования? Или есть ли лучший способ справиться с этими сценариями?
1 ответ
Если вы на самом деле используете SproutCore, вы можете легко добавить classNames
( ссылка на документацию) или layerId
( ссылка на документ) свойство для любого представления, чтобы сделать селекторы CSS короче.
Например:
MyApp.MainListView = SC.ListView.extend({
layerId: 'my_special_view',
classNames: 'my-special-class',
content: ["Hi", "Foo", "Bar"],
exampleView: SC.ListItemView.extend({
classNames: 'my-special-list-class'
})
})
Примечание: вы хотите использовать только layerId
Если вы уверены, что на экране будет только 1 экземпляр, в противном случае classNames
собственность - лучший путь.
Я бы рекомендовал добавить некоторые имена классов, которые не являются специфичными для тестирования, но которые позволяют использовать более короткие CSS-селекторы.