Идентификация объектов, созданных с помощью фреймворка, а не созданных с помощью исходного 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-селекторы.

Другие вопросы по тегам