Поскольку мой вопрос касался конкретно транспортира, я выкладываю решение, которое у меня получилось.Приступая к той части, в которой я застрял изначально - почему вместо «*»
>getComputedStyle(document.querySelector('label')).content
<"normal"
я получаю «обычный» * Так что раньше я не знал, что :: after создает псевдо-дочерний элементвнутри элемента метки.
Проверка элемента <label>
в Chrome показывает приведенный ниже HTML
<label>
I'm mandatory
::after
</label>
Если щелкнуть элемент <label>
и проверить вкладку Computed, я могу увидеть, что значение свойства content
is normal
.
Однако, если я нажму на ::after
псевдоэлемент, я смогу увидеть на вкладке Computed значение для свойства content
: " *"
.
Asупомянутое в других ответах getComputedStyle()
с псевдоэлементом в качестве второго параметра, является единственным способом получить значение свойства CSS для "::after
".Суть проблемы в том, что транспортир не имеет эквивалента для getComputedStyle()
, поэтому мы должны полагаться на browser.executeScript()
, как показано ниже:
let labelHeader = 'I'm mandatory *';
// Passing label element separately as in the real test case, it would be extracted from parent
// enclosing element and need to be able to pass it as a parameter to browser.executeScript().
let label = element(by.css('label'));
browser.executeScript("return window.getComputedStyle(arguments[0], ':after').content",
label)
.then ((suffixData: string) => {
// suffixData comes out to be '" *"', double quotes as part of the string.
// So get rid of the first and last double quote character
suffixData = suffixData.slice(1, suffixData.length - 1);
labelText += suffixData;
expect(labelText).toBe(labelHeader);
});