Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix error message when element located using `by.cssContainingText' is not found. #10

Closed
wlsf82 opened this issue Nov 13, 2018 · 6 comments
Assignees

Comments

@wlsf82
Copy link
Owner

wlsf82 commented Nov 13, 2018

Today it shows something like Failed: element with locator 'undefined' is not visible.

@PauloGoncalvesBH, maybe you can take a look at it.

Here is a test example:

fit("foo", () => {
  const fooEl = element(by.cssContainingText('foo', 'foo'))
  protractorHelper.waitForElementVisibility(fooEl)
});
@PauloGoncalvesBH
Copy link
Collaborator

I'll check it.

@PauloGoncalvesBH
Copy link
Collaborator

O que eu constatei até agora:

Para pegar o elemento na mensagem de erro é utilizado esse trecho: htmlElement.parentElementArrayFinder.locator_.value

Pra testes e ter os resultados abaixo, eu excluí o final .value da função getDefaultIsNotVisibleMessage, fazendo com que seja impresso o locator_ do elemento que deu erro.

Ao utilizar o by.id, o locator_ retornado é esse:
By(css selector, *[id="asdasd"])
O value, que será adicionado na mensagem, é *[id="asdasd"].
Portanto, o value é o valor à direita da linha dentro da função By().

Porém, ao utilizar o by.cssContainingText, o locator retornado é diferente dos demais:
by.cssContainingText("asasda", "asdasd")
Dessa forma, não tem value para retornar, por isso na mensagem está aparecendo undefined.

O problema ocorre apenas quando você utiliza o locator cssContainingText, com os outros locators o value é retornado corretamente devido à retornarem a função By().

O que eu farei agora será estudar as opções de retorno do parentElementArrayFinder, para só então ver a melhor forma de corrigir.

Já pensei nas seguintes opções de correção que serão minhas últimas opções, pois não quero deixar as mensagens de retorno dos locators que não sejam o cssContainingText ruins:

  1. Ao invés de imprimir o value do locator, imprimir o locator. As mensagens ficariam assim:
    1.1 Failed: element with locator 'By(css selector, *[id="asdasd"])' is not visible
    Nesse caso ficará pior para o usuário, pois imprimia o value *[id="asdasd"]).
    1.2 Failed: element with locator 'by.cssContainingText("asasda", "asdasd")' is not visible
    Nesse caso, especificamente com o cssContainingText, o usuário passará a saber qual locator não está visível, ao invés de imprimir undefined.
  2. Criar alguma validação de que se for cssContainingText, imprimir o locator, e não o value. Não sei se é possível.

@PauloGoncalvesBH
Copy link
Collaborator

Adendo:

Não ocorre apenas com o cssContainingText, mas com todos os elementos específicos do Protractor, como o buttonText e o partialButtonText.

@PauloGoncalvesBH
Copy link
Collaborator

PauloGoncalvesBH commented Nov 14, 2018

@wlsf82
Pelo que estudei, realmente a única solução é essa:

Ao invés de imprimir o value do locator, imprimir o locator. As mensagens ficariam assim:
1.1 Failed: element with locator 'By(css selector, *[id="asdasd"])' is not visible
Nesse caso ficará pior para o usuário, pois imprimia o value *[id="asdasd"]).
1.2 Failed: element with locator 'by.cssContainingText("asasda", "asdasd")' is not visible
Nesse caso, especificamente com o cssContainingText, o usuário passará a saber qual locator não está visível, ao invés de imprimir undefined.

O que acha de aplicar ela?

Vai ajudar nos locators do protractor, que estão retornando undefined, mas atrapalhar um pouco nos do selenium, que retornam o valor passado.

Se aprovar eu faço as alterações e o PR.

@wlsf82
Copy link
Owner Author

wlsf82 commented Nov 14, 2018

Go ahead. Better to have all cases giving a valid error message, than only some cases.

@wlsf82
Copy link
Owner Author

wlsf82 commented Dec 7, 2018

Closed by 4f9dbaf

@wlsf82 wlsf82 closed this as completed Dec 7, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants