1 of 18

Czy strona wciąż dobrze działa?

O automatyzacji kliknięć w przeglądarce

Konrad Karpieszuk

2 of 18

Co możemy zautomatyzować?

  • odwiedziny stron
  • kliknięcia w linki
  • wypełnianie i przesyłanie formularzy
  • właściwie wszystko ;)

3 of 18

Po co automatyzować?

  • testowanie stron i oprogramowania
  • automatyzacja pobierania danych
  • zachowania nieetyczne

Oszczędność czasu

4 of 18

Jak automatyzować?

5 of 18

Codeception

6 of 18

https://xkcd.com/1205/

7 of 18

Instalacja

composer require "codeception/codeception" --dev

8 of 18

Instalacja

composer require "codeception/codeception" --dev

# wygeneruj katalog tests i plik konfiguracyjny

php vendor/bin/codecept bootstrap

9 of 18

Instalacja

composer require "codeception/codeception" --dev

# wygeneruj katalog tests i plik konfiguracyjny

php vendor/bin/codecept bootstrap

# utworz plik testu

php vendor/bin/codecept generate:cest acceptance \ First

10 of 18

Instalacja

# tests/acceptance.suite.yml

actor: AcceptanceTester

modules:

enabled:

- WebDriver:

url: https://wpzlecenia.pl

browser: 'chrome'

window_size: 1920x1080

port: 9515

- \Helper\Acceptance

step_decorators: ~

extensions:

enabled:

- Codeception\Extension\RunProcess:

0: ./chromedriver --url-base=/wd/hub

sleep: 5

11 of 18

Instalacja

12 of 18

Uruchomienie testu

vendor/bin/codecept run acceptance

13 of 18

use Secrets\Secret;

class NewJobCest

{

public function _before(AcceptanceTester $I)

{

}

// tests

public function visitorCanAddNewJobOffer(AcceptanceTester $I)

{

$I->amOnPage( '/' );

$I->see( 'Zlecenia' );

$I->click( 'a[title="Dodaj zlecenie"]' );

$I->see( 'Wypełnij poniższy formularz' );

$I->fillField( 'input[name="tytulOgloszenia"]', '[cctest] Testowe ogłoszenie' );

$I->fillField( 'textarea[name="opisOgloszenia"]', 'Treść testowego ogłoszenia' );

$I->fillField( 'input[name="daneKontaktoweEmail"]', 'test@example.com' );

$I->checkOption( 'input[name="rodoZgoda"]' );

$I->click( '#wpzlecenia_dodaj_button' );

$I->waitForText( 'OK. Ogłoszenie zostało dodane' );

$I->amOnPage( '/wp-login.php' );

$I->fillField( '#user_login', 'cctest' );

$I->fillField( '#user_pass', (new Secret())->getPass() );

$I->click( '#wp-submit' );

$I->amOnPage( '/wp-admin/edit.php' );

$I->see( '[cctest] Testowe ogłoszenie' );

$I->moveMouseOver( 'a[aria-label="„[cctest] Testowe ogłoszenie” (Edycja)"]' );

$I->click( 'a[aria-label="Przenieś „[cctest] Testowe ogłoszenie” do kosza"]' );

$I->see( 'wpis został przeniesiony do kosza' );

}

}

14 of 18

$I->amOnPage( '/' );

$I->see( 'Zlecenia' );

$I->click( 'a[title="Dodaj zlecenie"]' );

$I->see( 'Wypełnij poniższy formularz' );

$I->fillField( 'input[name="tytulOgloszenia"]', '[cctest] Testowe ogłoszenie' );

$I->fillField( 'textarea[name="opisOgloszenia"]', 'Treść testowego ogłoszenia' );

$I->fillField( 'input[name="daneKontaktoweEmail"]', 'test@example.com' );

$I->checkOption( 'input[name="rodoZgoda"]' );

$I->click( '#wpzlecenia_dodaj_button' );

$I->waitForText( 'OK. Ogłoszenie zostało dodane' );

15 of 18

$I->amOnPage( '/wp-login.php' );

$I->fillField( '#user_login', 'cctest' );

$I->fillField( '#user_pass', (new Secret())->getPass() );

$I->click( '#wp-submit' );

16 of 18

$I->amOnPage( '/wp-login.php' );

$I->fillField( '#user_login', 'cctest' );

$I->fillField( '#user_pass', (new Secret())->getPass() );

$I->click( '#wp-submit' );

// z WPWebDriver zamiast WebDriver

$I->loginAs( 'cctest', (new Secret())->getPass() );

17 of 18

$I->amOnPage( '/wp-admin/edit.php' );

$I->see( '[cctest] Testowe ogłoszenie' );

$I->moveMouseOver( 'a[aria-label="„[cctest] Testowe ogłoszenie” (Edycja)"]' );

$I->click( 'a[aria-label="Przenieś „[cctest] Testowe ogłoszenie” do kosza"]' );

$I->see( 'wpis został przeniesiony do kosza' );

18 of 18