Webdriverio: Ubah implementasi perintah get* wdio

Dibuat pada 23 Apr 2017  ·  3Komentar  ·  Sumber: webdriverio/webdriverio

Halo

Dalam proyek kami, kami mengganti perintah wdio getText dan menambahkan perintah baru getTexts :

getText.js

'use strict';

let assert = require('assert');

/**
 * <strong i="10">@alias</strong> browser.getText
 * <strong i="11">@param</strong> {String} selector
 * <strong i="12">@returns</strong> {String}
 */

let _getText = browser.getText;

browser.addCommand('getText', function (selector) {
    let result = _getText.apply(browser, arguments);

    if (Array.isArray(result)) {
        throw new assert.AssertionError({
            message: 'Found several elements, expected one',
            expected: 'One item on page',
            actual: 'Several elements',
        });
    }

    return result;
}, true);

getTexts.js

'use strict';

/**
 * <strong i="16">@alias</strong> browser.getTexts
 * <strong i="17">@param</strong> {String} selector
 * <strong i="18">@returns</strong> {String[]}
 */

let _getText = browser.getText;

browser.addCommand('getTexts', function (selector) {
    let result = _getText.apply(browser, arguments);

    if (!Array.isArray(result)) {
        return [result];
    }

    return result;
});

Ini membantu kami menghindari peretasan seperti ini .

Lamaran ku

Saya memiliki proposal untuk mengubah semua metode ini dengan cara yang serupa:

  • getText(s)
  • getValue(s)
  • getAttribute(s)
  • getTagName(s)
  • getCssProperty(ies)

Saya ingin melakukan ini karena cara ini terlihat seperti peretasan dan sangat sering terjadi dalam pengujian kami. Apa yang Anda pikirkan tentang ini?

Kasus penggunaan:

Saat pengembang menulis tes, paling sering dia ingin mendapatkan teks dari beberapa elemen tertentu di halaman (oleh pemilih):

...
const header = browser.getText('h1');
assert.equals(header, 'Hello here!');
...

Tapi sekarang kita harus melakukan pemeriksaan seperti ini di setiap tes:

...
const header = browser.getText('h1');
assert(Array.isArray(header), 'We have more than one `h1` header on the page!');
assert.equals(header, 'Hello here!');
...

Di sisi lain , ketika kita memiliki halaman, misalnya, daftar elemen dan ingin mendapatkan isi dari elemen daftar ini, kita berharap untuk mendapatkan array string :

...
const emails = browser.getText('.address-book');
assert.equals(emails.length, 1);
...

Tetapi dalam situasi ini metode getText berperilaku aneh dan tidak terduga. Sekarang kita harus melakukan pemeriksaan seperti ini di setiap tes:

...
let emails = browser.getText('.address-book');
if (!Array.isArray(emails)) { emails = [emails] }
assert.equals(emails.length, 1);
...

Apa yang bisa kita lakukan untuk masalah ini?

Pertama, kita bisa melakukan pemeriksaan tersebut di setiap tes. Tapi ini adalah pilihan yang sangat tidak cocok.
Opsi kedua — adalah mengganti getText dan perintah serupa lainnya di semua proyek tempat kami menggunakan pengujian. Tetapi metode ini memiliki dua kelemahan penting:

  • Ketika pengembang pertama kali melihat metode baru, ia membuka dokumentasi untuk wdio dan melihat deskripsi yang salah
  • Kami tidak akan memiliki dukungan IDE untuk metode yang diganti

Akan jauh lebih nyaman dan lebih jelas untuk memiliki fungsi serupa di API inti.

Discussion

Komentar yang paling membantu

Sejujurnya sepertinya masalah Anda berasal dari strategi pencari yang rapuh, bukan webdriverio ...

Opsi alternatif untuk memperbaiki strategi locator Anda adalah dengan menambahkan perintah sendiri di hook sebelumnya.

Semua 3 komentar

Sejujurnya sepertinya masalah Anda berasal dari strategi pencari yang rapuh, bukan webdriverio ...

Opsi alternatif untuk memperbaiki strategi locator Anda adalah dengan menambahkan perintah sendiri di hook sebelumnya.

Opsi alternatif untuk memperbaiki strategi locator Anda adalah dengan menambahkan perintah sendiri di hook sebelumnya.

Tidak mungkin tanpa https://github.com/webdriverio/wdio-sync/pull/71

Ini akan diperbaiki di v5 di mana kami memperkenalkan cakupan elemen dan Anda hanya dapat memanggil perintah ini pada elemen tunggal.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat