quinta-feira, 18 de julho de 2013

Selenium WebDriver C# - Mouse Actions.

Olá pessoal, um código que foi difícil de encontrar na net é o que simula a ação do Mouse.
Existem vários sites que tem menus dropdown e dependendo do site precisa apontar o mouse ou clicar e aguardar apresentar os submenus.
Para fazer essa simulação eu utilizei o site http://www.msn.com.br que utiliza esse tipo de menu dropdown.
Vamos utilizar a biblioteca import org.openqa.selenium.interactions.Actions.
O código fica assim:

            Actions actions = new Actions(driver);
            IWebElement menuDropDown = driver.FindElement(By.LinkText("ENTRETENIMENTO"));
            actions.MoveToElement(menuDropDown);
            //actions.Click();
            actions.Perform();
            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(6));
            driver.FindElement(By.LinkText("famosos")).Click();

Para o comando IWebElement coloquei o nome menuDropDown.
Para o comando FindElement fiz a procura pelo Texto do Link.
Para o comando actions.moveToElement o Selenium vai procurar o IWebElement que colocamos o nome de "menuDropDown", ou seja, o Link "ENTRETENIMENTO"
Para o comando actions.Click() é para ser usado caso o menu para apresentar o submenu tenha que ter a ação de um clique, como o Site do MSN precisa apenas que o mouse seja posicionado eu comentei o comando.
O comando driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(6)); é para aguardar 6 segundos para o submenu ser apresentado.
Para o comando FindElement fiz a procura pelo Link de Texto "famosos".

Abaixo o código completo:




É isso aí pessoal, estava no Débito.

13 comentários:

  1. Cleber, bom dia.
    Post muito bom, porem no meu caso não deu certo, pois os botões são em Javascript.
    Gostaria de saber se você não pretende escrever nada como realizar a chamada dos botões em javascript?
    Obrigado
    Rodrigo Arriel

    ResponderExcluir
  2. Oi Rodrigo, seu botão em javascript é tipo dropdown? Baixa o plugin do selenium para firefox da um rec e play e vê se pelo browser funciona. Caso funcione no aplicativo da para exportar para C# daí você vê qual foi a referencia que foi usada do objeto. Pelo selenium do firefox dá para pegar varias referencias e tentar usar no webdriver.

    ResponderExcluir
  3. Cleber,
    Bom dia.

    Em uma aplicação eu resolvi de outra forma, mas o problema de acionamento do botão em javascript me persegue.
    Gostaria de verificar com você onde encontro a biblioteca import org.openqa.selenium.interactions.Actions que você se refere neste post?

    Muito obrigado
    Rodrigo Arriel

    ResponderExcluir
  4. Bom dia Rodrigo,

    Essa biblioteca em que você se refere é para Java, para C# é a seguinte:

    using OpenQA.Selenium.Interactions;

    Abraço

    ResponderExcluir
  5. Cleber,
    Boa tarde.

    Muito obrigado.
    Aproveitando, estes comando funcional em paginas ASP?
    Pois a aplicação que estou automatizando é toda feita em asp. E como devo proceder para pegar o nome do botão?

    Muito obrigado pela força
    Abraço
    Rodrigo Arriel

    ResponderExcluir
  6. Cleber,

    Estou fazendo da seguinte forma mais sem sucesso.

    Actions actions = new Actions(driver);
    IWebElement menuDropDown = driver.FindElement(By.LinkText("Ordem de Serviço"));
    actions.MoveToElement(menuDropDown);
    actions.Click();
    actions.Perform();
    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(6));

    Já não sei o que fazer mais.

    ResponderExcluir
    Respostas
    1. Boa Noite Rodrigo,

      Você não tem o link da aplicação para eu tentar ver se consigo acessar o menu?

      Excluir
  7. Boa tarde Rodrigo,

    Você tentou pela ide do selenium no firefox? Por ela você faz o Rec e ela gera o script, daí você vê como que ela faz para identificar o elemento, daí você tenta usar esse elemento que ela encontrou e faz um mouse action ou um findelements mesmo.

    ResponderExcluir
  8. Cleber,
    Boa tarde.

    Fiz os testes do via FireFox, e deu certo.

    Obrigado
    Att
    Rodrigo Arriel

    ResponderExcluir
  9. Este comentário foi removido pelo autor.

    ResponderExcluir
  10. Cleber,
    Bom dia. Tudo bem!

    Bom, como sempre estou aqui novamente para pedir dica de automação. kkk
    O lance é que as aplicações da minha empresa tem umas coisas de maluco, que só vendo para acreditar. mas vamos la com a pergunta.
    Na minha aplicação tem alguns pop-up e modais que são em VBScript, e tenho que acionar os botões nele. O que devo fazer para meu robô entender isto.

    ResponderExcluir
    Respostas
    1. Opa Rodrigo, boa tarde,

      Cara, você tem que identificar os id´s dos popups e das modais, se você não conseguir na mão, usa aquele app do firefox, já fiz automação e consegui desta forma.

      Excluir
  11. Tudo na paz Cleber.

    Então, minha aplicação só funciona no IE, só no IE 9. Por isto não tenho como pegar as informações via FF.

    ResponderExcluir