Dúvida Protractor - Click() em Radio Button



  • Prezados, estou com a seguinte situação:

    Estou tentando realizar um click() no radio de ‘Sexo’ apontando corretamente para o elemento.

    1_1501690889699_html.png

    Porém ao rodar o teste, não é realizada a seleção e estoura erro informando que o radio não é clicável, e que outro elemento, acima hierarquicamente, irá receber o click.

    Fiz o page object implementando a seleção do radio do sexo masculino, por exemplo, da seguinte forma, então não creio que o erro seja do modo que fiz:

    var Helper = require('../helper.js');
    
    var helper = new Helper();
    
    var Perfil = function() {
        this.SexoMasculino = element(by.css('[type="radio"][value="M"]'));
    };
    
    Perfil.prototype.SelecionarSexoMasculino = function() {
        helper.ScrollAteElemento(this.SexoMasculino);
        this.SexoMasculino.click();
    };
    
    module.exports = Perfil;
    

    Erro:
    0_1501690889698_cmd.png

    Erro no report:
    2_1501690889700_report.png

    Alguém saberia de alguma solução para selecionar o sexo do candidato?





  • @samuellucas said in Dúvida Protractor - Click() em Radio Button:

    Já tentou isto?

    browser.actions().mouseMove(this.SexoMasculino).click();

    https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/actions_exports_ActionSequence.html

    Obrigado pela dica Samuel.

    Implementei as 3 formas seguintes e novamente não deu certo.
    1 - Com o que implementei inicial dava erro que não era clicável.
    2 - Com a sua sugestão parou de dar erro e simplesmente continua sem selecionar o radio.
    3 - Com a outra forma que implementei continua a mesma coisa da sua.

    Perfil.prototype.SelecionarSexoMasculino = function() {
    	helper.ScrollAteElemento(this.SexoMasculino);
    	//browser.actions().mouseMove(this.SexoMasculino).click();
    	browser.actions().click(this.SexoMasculino);
    	//this.SexoMasculino.click();
    };
    

  • MVP

    Já tentou a seleção por outro elemento? Ou até a gambi marota de selecionar o campo acima e jogar um tab para ver se ele capta esse elemento ? (a gambi é só para ver…não usa uma porcaria dessas…)

    ps: Campo sexo do tipo RadioButton, foi feito manualmente por limitações da...
    Olha a gambi ae…aeuheauhaeuhe



  • Ok @Paulo-Gonçalves ;/

    Duas dúvidas:

    • Tu consegue interagir com algum outro elemento deste formulário?
    • Essa tua aplicação utiliza algum frame / sobre frame?

    E agora, três outras tentativas:

    • Se usa algum frame, confere e altera para o frame correto no momento do clique:
    browser.switchTo().frame('id ou anyway que mapeie o frame');
    

    https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/chrome_exports_Driver.html

    • Altera o identificador css para input, considerando o valor que tu espera. Pode dar problema se tu tiver mais de um radio b na mesma tela e com os mesmos valores
    this.SexoMasculino = element(by.css('input[value="M"]'));
    
    • Tenta trocar de css selector para xpath com axes. Pelo que estou vendo, na estrutura do teu html vai ficar algo mais ou menos assim:
    //*[contains(text(), 'Feminino')]/preceding::input
    

    https://www.w3schools.com/xml/xpath_axes.asp



  • Neste caso quem sabe você pode utilizar o seguinte:

    browser.executeScript(“document.querySelector(”[type=‘radio’][value=‘M’]").click();");



  • quem sabe poderia até criar uma função helper que execute este código, para não sujar o código do teste.



  • @Paulo-Gonçalves cara, calma, não vai pros lados de xpath e muito menos JS diretamente antes de tentar outros seletores. Esse problema é normal e acontece quando uso o Capybara com Chrome também, é só clicar no label em vez do elemento em si.

    No seu caso, acho que seria [for=controller_model.ppessoadadospessoais[0].sexo] . Usa isso como seletor CSS.

    Um exemplo de um teste meu que interage com um radio button (no Capybara):

    find("[for=cms_page_content_attributes_team_attributes_0_type_network]").click'



  • @stefanteixeira said in Dúvida Protractor - Click() em Radio Button:

    @Paulo-Gonçalves cara, calma, não vai pros lados de xpath e muito menos JS diretamente antes de tentar outros seletores. Esse problema é normal e acontece quando uso o Capybara com Chrome também, é só clicar no label em vez do elemento em si.

    No seu caso, acho que seria [for=controller_model.ppessoadadospessoais[0].sexo] . Usa isso como seletor CSS.

    Um exemplo de um teste meu que interage com um radio button (no Capybara):

    find("[for=cms_page_content_attributes_team_attributes_0_type_network]").click'

    Opa @stefanteixeira, obrigado pela dica, assim que realizar o teste informo o resultado.
    Eu mesmo tenho total preconceito com xpath devido a não ser uma boa prática de automação.



  • XPath salva vidas em alguns casos, o negócio é usar com muita moderação. O próprio Capybara tem uns recursos que facilitam vc a não ter que usar xpath, conforme fui aprendendo os recursos do framework fui refatorando o código e usando xpath somente onde necessário.