Webdriverio: webdriverjs vs selenium-wedriverjs (pergunta)

Criado em 10 jan. 2014  ·  18Comentários  ·  Fonte: webdriverio/webdriverio

Olá pessoal,

Peço desculpas antecipadamente se estou fazendo perguntas estúpidas.

Primeiro, este projeto é de fato diferente de selenium-wedriver-js, correto? O nome me confundiu um pouco :(

Em segundo lugar, como o webdriverio se compara ao selenium-webdriverjs? selenium-webdriverjs parece muito java-y para mim, por outro lado, não consigo imaginar como o webdriverio (seu) faz coisas assíncronas.

Basicamente, preciso de ajuda para escolher um ou outro. Obrigado!

Comentários muito úteis

oi @ dmitrym0

essa não é uma pergunta estúpida, de fato frequentemente perguntada! Eu respondo muito a isso. Basicamente, ambos têm o mesmo propósito. Há também uma biblioteca chamada WD.js, que também é um

Eu nunca usei uma das outras bibliotecas antes, então posso apenas falar sobre esta. Estamos tentando fornecer um runner de selênio que seja fácil de usar, altamente extensível e compatível com todos os frameworks de teste JavaScript comuns. Ele usa uma API de cadeia própria para executar todos os comandos assíncronos na ordem correta. A especialidade desta biblioteca é que envolvemos todos os comandos do protocolo JSONWire em comandos de ações úteis. Portanto, você não precisa se preocupar em obter um elemento primeiro e, em seguida, chamar o comando de clique; basta executar o clique com um seletor como parâmetro. Aqui está um exemplo simplificado:

selenium-webdriverjs :

driver.get('http://www.google.com');
driver.findElement(webdriver.By.id('q')).sendKeys('webdriver');
driver.findElement(webdriver.By.id('btnG')).click();

WD.js

browser
  .get("http://www.google.com")
  .elementById('q')
  .sendKeys('webdriver')
  .elementById('btnG')
  .click()

Agora nesta biblioteca:

client
    .url('http://google.com')
    .setValue('#q','webdriver')
    .click('#btnG')

O WebdriverIO também tem quase todos os comandos de protocolo implementados, portanto, você pode fazer o mesmo com os comandos de protocolo JSONWire padrão.

client
    .url('http://google.com')
    .element('#q', function(err,res) {
        client.elementIdValue(res.value.ELEMENT, 'webdriver');
    })
    .element('#btnG', function(err,res) {
        client.elementIdClick(res.value.ELEMENT);
    });

Cada um tem seu próprio sabor, você precisa decidir qual se encaixa mais no seu caso. Espero que isso esclareça um pouco. Gostaria de ajudá-lo se você tiver qualquer problema ao configurar seus testes. Mas acho que deve ser muito fácil e direto. Você pode encontrar uma lista de exemplos de testes aqui .

Felicidades

Todos 18 comentários

oi @ dmitrym0

essa não é uma pergunta estúpida, de fato frequentemente perguntada! Eu respondo muito a isso. Basicamente, ambos têm o mesmo propósito. Há também uma biblioteca chamada WD.js, que também é um

Eu nunca usei uma das outras bibliotecas antes, então posso apenas falar sobre esta. Estamos tentando fornecer um runner de selênio que seja fácil de usar, altamente extensível e compatível com todos os frameworks de teste JavaScript comuns. Ele usa uma API de cadeia própria para executar todos os comandos assíncronos na ordem correta. A especialidade desta biblioteca é que envolvemos todos os comandos do protocolo JSONWire em comandos de ações úteis. Portanto, você não precisa se preocupar em obter um elemento primeiro e, em seguida, chamar o comando de clique; basta executar o clique com um seletor como parâmetro. Aqui está um exemplo simplificado:

selenium-webdriverjs :

driver.get('http://www.google.com');
driver.findElement(webdriver.By.id('q')).sendKeys('webdriver');
driver.findElement(webdriver.By.id('btnG')).click();

WD.js

browser
  .get("http://www.google.com")
  .elementById('q')
  .sendKeys('webdriver')
  .elementById('btnG')
  .click()

Agora nesta biblioteca:

client
    .url('http://google.com')
    .setValue('#q','webdriver')
    .click('#btnG')

O WebdriverIO também tem quase todos os comandos de protocolo implementados, portanto, você pode fazer o mesmo com os comandos de protocolo JSONWire padrão.

client
    .url('http://google.com')
    .element('#q', function(err,res) {
        client.elementIdValue(res.value.ELEMENT, 'webdriver');
    })
    .element('#btnG', function(err,res) {
        client.elementIdClick(res.value.ELEMENT);
    });

Cada um tem seu próprio sabor, você precisa decidir qual se encaixa mais no seu caso. Espero que isso esclareça um pouco. Gostaria de ajudá-lo se você tiver qualquer problema ao configurar seus testes. Mas acho que deve ser muito fácil e direto. Você pode encontrar uma lista de exemplos de testes aqui .

Felicidades

Muito bom, responda @ christian-bromann. Acho que deve ter um link no readme.md agora.

@ christian-bromann, muito obrigado por me explicar isso. Isso ajuda muito.

Se eu puder pedir um pouco mais do seu tempo. Escrevi um script em selenium-webdriverjs que ilustra bem meu caso de uso atual.

Isto:

  • abre uma página da Wikipedia
  • encontra todos os parágrafos de texto na página
  • clica no primeiro e no quinto parágrafo para selecioná-los

Gostaria de reproduzir isso no webdriverio, mas não consigo descobrir como selecionar o texto. Você pode me ajudar com isso? Obrigado!

O texto do meu selenium-webdriverjs atual está abaixo:

var assert = require('assert'),
test = require('selenium-webdriver/testing'),
webdriver = require('selenium-webdriver');

var driver = new webdriver.Builder().
    usingServer("http://localhost:9515").
    withCapabilities(webdriver.Capabilities.chrome()).
    build();

test.describe('selection', function() {
    test.it('should be able to select two paragraphs', function() {
        console.log("Request URL");
        driver.get("http://en.wikipedia.org/wiki/Computer_programming");
        var startParagraph, endParagraph;
        driver.sleep(500).then(function() {
            console.log("Getting all paragraphs");
            var allPs = driver.findElements({tagName: 'p'}).then();

            allPs.then(function(allParagraphs){
                console.log("Got paragraphs.");
                allParagraphs[1].then(function(startParagraphvalue){
                    startParagraph = startParagraphvalue
                    console.log("Resolved paragraph 1")
                });

                allParagraphs[5].then(function(endParagraphvalue){
                    endParagraph = endParagraphvalue
                    console.log("Resolved paragrpah 2" + endParagraphvalue);
                });
            });
        }).then(function() {
            console.log("Trying to select stuff now");
            new webdriver.ActionSequence(driver).
                keyDown(webdriver.Key.SHIFT).
                click(startParagraph).
                click(endParagraph).
                keyUp(webdriver.Key.SHIFT).
                perform().then(function(){
                    console.log("Done selection?");
            });
        });


    });
});

Com o WebdriverIO é um pouco mais curto ;-)

var assert = require('assert'),
    client = require('webdriverjs').remote({desiredCapabilities:{browserName:'chrome'}});

client
    .init()
    .url('http://en.wikipedia.org/wiki/Computer_programming')
    .elements('tag name','p',function(err,res) {
        client
            // move to first paragraph to the upper left corner (0,0)
            .moveTo(res.value[0].ELEMENT, 0, 0)
            // press shift key
            .keys('Shift')
            // do left click
            .buttonPress('left')
            // move to 5th paragraph to the lower right corner (1,1)
            .moveTo(res.value[5].ELEMENT,1,1)
            // do left click
            .buttonPress('left')
            // pause for 5000ms to be able to see selected text
            .pause(5000);
    })
    .end();

Primeiro, consultamos todos os elementos com o nome de tag p . O objeto res.value contém uma matriz de elementos. Em seguida, basta selecionar um texto usando a tecla shift. Admito que isso não é simples para novos usuários porque os comandos de protocolo não estão realmente documentados. O webdriver.io estará no ar em breve e fará a cobertura disso.

Estou realmente começando a me inclinar para o webdriver.io !!!!

@ dmitrym0 você tem mais perguntas?

@wayneseymour ótimo! parece bom

parece ser que não há mais perguntas. fechando.

Obrigado por toda sua ajuda @ christian-bromann!

curioso, você e adam wd.js trabalham no molho. Pretende manter 2 libs de nó do webdriver em funcionamento?

Não sei para onde o WD.js está indo, comecei a trabalhar no webdriver.io muito antes de entrar no molho e todo o meu trabalho que coloquei aqui não tem nada em comum com o que faço com o molho. Estou fazendo tudo isso no meu tempo livre e aproveito para contribuir com o mundo do código aberto ;-)

obrigado pela resposta e o projeto parece ótimo!

@ christian-bromann eu sei que isso é um pouco antigo e pode já ter sido resolvido, mas seu exemplo de usar uma pausa é uma prática muito ruim no mundo do selênio e leva a resultados inconclusivos, ou seja, como você sabe que leva 5 segundos e você pode garante que sempre será 5 segundos?

.pause(5000);

Uma abordagem melhor é tentar novamente com um período de tempo limite, ou seja, não sabemos quanto tempo leva, mas continuaremos tentando por 30 segundos e, se ainda não tivermos, obviamente há um problema.

Existe algo em vigor para esse tipo de abordagem usando o webdriver IO?

Sim, o WebdriverIO tem vários comandos waitFor *. Confira a API

Oi Christian, eu realmente preciso de sua ajuda. Estou muito confuso ao selecionar a pilha de teste de automação.
Opções 1) Webdriver.IO, Selenium standalone e Cucumber.io (A JavaScript Approached) AND
Opção 2) WebdriverJS, Selenium JAR e Cucumber JAR (A Java Approached).

Nós, como equipe, realmente gastamos muito tempo e experiência - o WebdriverIO não é maduro o suficiente se comparado ao Selenium, Cucumber e Webdriver (abordagem java).

Vi sua ajuda e comentários na internet e gostaria muito de receber seus comentários aqui também.

Oi pessoal,

Eu já passei por este tópico, mas ainda estou confuso sobre qual estrutura escolher.
Estarei testando um aplicativo móvel no Android e iOS, também em dispositivos / simuladores reais.
Vai precisar de funções para rolar verticalmente / horizontalmente e tudo.

Por favor sugira!

Obrigado

mas ainda estou confuso sobre qual framework seguir.

O que devo dizer aqui? Posso apenas recomendar o uso do WebdriverIO. Suporta tudo.

OK. Obrigado @ christian-bromann :)
Você tem algum código de amostra para as funções TouchAction?

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

espekkaya picture espekkaya  ·  3Comentários

briancullinan picture briancullinan  ·  4Comentários

christian-bromann picture christian-bromann  ·  3Comentários

Pylipala picture Pylipala  ·  4Comentários

aminerouh picture aminerouh  ·  3Comentários