Estou testando o Protractor para testar o aplicativo Angular do e2e e não descobri como detectar se um elemento tem uma classe específica ou não.
No meu caso, o teste clica no botão enviar e agora quero saber se form [name = "getoffer"] tem a classe .ngDirty. Quais podem ser as soluções?
describe('Contact form', function() {
beforeEach(function(){
browser.get('http://localhost:9000');
element(by.linkText('Contact me')).click();
});
it('should fail form validation, all fields pristine', function() {
element(by.css('.form[name="getoffer"] input[type="submit"]')).click();
expect(element(by.name('getoffer'))).toHaveClass('ngDirty'); // <-- This line
});
});
fonte
expect(hasClass(element(by.name('getoffer')), 'ng-dirty')).toBe(true);
Se você estiver usando o Transferidor com Jasmine, poderá usar
toMatch
para corresponder como uma expressão regular ...Além disso, observe que
toContain
corresponderá aos itens da lista, se necessário.fonte
element
retornar um objeto com umhasClass
método, que você poderia envolver dentro de umaexpect
chamada ...toContain
pode ser uma escolha melhor do quetoMatch
neste caso./(^|\s)ngDirty($|\s)/
..not.toContain
para verificar se não tem a classe em particular ou.toContain
para verificar se ela existeO mais simples é:
fonte
java.util.ArrayList cannot be cast to java.lang.String
no Microsoft EdgeCom base na resposta de Sergey K, você também pode adicionar um matcher personalizado para fazer isso:
(coffeescript)
Então você pode usá-lo em testes como este:
E você obterá o seguinte erro se isso não acontecer:
fonte
Você tentou...
ou uma variação do acima ...
fonte
Fiz este matcher, tive que embrulhar em uma promessa e usar 2 retornos
em meu teste agora posso fazer coisas como esta:
isso também funciona quando um elemento tem várias classes ou quando um elemento não tem nenhum atributo de classe.
fonte
Aqui, um
toHaveClass
matcher personalizado Jasmine 1.3.x com.not
suporte de negação e aguarde até 5 segundos (ou o que você especificar).Encontre o matcher personalizado completo a ser adicionado ao seu bloco onPrepare nesta essência
Uso de amostra:
fonte
É assim que faço pelo menos, sem a necessidade de usar a função expect. Esta função simplesmente retorna true se a classe estiver dentro do elemento e false se não estiver. Isso também usa promessas, então você pode usá-lo como:
Edit: acabei de perceber que isso é essencialmente o mesmo que a resposta principal
fonte
Uma maneira de conseguir isso seria usar xpath e usar
contains()
Exemplo:
fonte
Você pode usar o analisador CSS para lidar com isso, verificando se existe um elemento com a classe fornecida:
fonte