2016-11-07 2 views
-1

Как найти все те элементы, которые имеют особый атрибут в Protractor? Я нашел похожие вопросы в Stackoverflow и в сети, но они используют xpath, который ограничивает тег.Найти элемент с помощью настраиваемого атрибута

element(by.xpath('//div[@custom-attribute]')) 

Как противостоять выше примеру, я не хочу ставить ограничение на тег, так как у нас есть различные теги с тем же пользовательским атрибутом. Я бы хотел найти все элементы с атрибутом независимо от тега. Это возможно?

+2

Нельзя использовать что-то вроде 'document.querySelectorAll ('div [attribute]')'? – Cerbrus

+0

Поскольку этот пользовательский атрибут определен не только для элементов div, но и для других, таких как кнопки, гиперссылки и, возможно, другие теги, я не уверен, что это возможно. ... если у меня есть эти утверждения для всех других тегов. – user30646

+1

Итак? Просто оставьте «div». – Cerbrus

ответ

4

Вы можете использовать CSS selector locator:

element.all(by.css('[custom-attribute]')); 

Или через $$ ярлык:

$$('[custom-attribute]'); 

[custom-attribute] является attribute selector, что будет соответствовать любой элемент, имеющий атрибут custom-attribute.

+0

Не удалось передать результат обычного 'querySelectorAll' в' element.all() '? Или я ошибаюсь в предположении, что там есть родная JS funcitonality? – Cerbrus

+0

@Cerbrus да, нет * «прямого» * ​​доступа к 'querySelectorAll()', но теоретически вы можете это сделать через ['executeScript()'] (http://www.protractortest.org/#/api? view = webdriver.WebDriver.prototype.executeScript) или внутри пользовательского локатора - некоторые из локаторов-экспонентов bult-in фактически используют 'querySelectorAll' внутри - например,' by.repeater() '([source] (https://github.com/angular/protractor/blob/7da9c3a910bb000b30bf9ba82ef48c64bd751709/lib/clientsidescripts.js#L177)). Спасибо, хороший вопрос (не отменил ваш ответ, хотя). – alecxe

+0

Я был удивлен, когда -3. Но так как это «родной» запрос селектора, то это лучший ответ. – Cerbrus

Смежные вопросы