내가 한 노력들

[ PHP ] Selenium사용해서, 브라우저 자동화 테스트하기 본문

IT 공부/PHP

[ PHP ] Selenium사용해서, 브라우저 자동화 테스트하기

JONGI-N CHOI 2022. 6. 14. 10:00

Selenium

웹 애플리케이션 테스트를 위한 포터블 프레임워크이다.

 

 

환경

1. XAMPP

2. composer

3. 크롬 102버전

 

composer로 php-webdriver 설치

composer require php-webdriver/webdriver

 

Windows에서 PHP로 Curl 활성화 

php.ini

extension=bz2
extension=curl
extension=fileinfo
extension=gd2
extension=mbstring
extension=openssl
extension=pdo_mysql
extension=pgsql
extension=shmop
extension=sqlite3
extension=tidy
extension=xmlrpc
extension=xsl

php.ini 파일에서 위의 주석을 해제합니다. 

 

Windows에서 PHP로 SSL 인증서 설정하기

로컬 인증서로 PHP CURL을 수정하려면 다음 단계를 수행해야 합니다.

1. Cacert.pem 다운로드  

 

2. 다운로드한 파일을 C:\\xampp\php\extras\ssl에 복사합니다.

 

3. php.ini 수정

curl.cainfo = "C:\PHP7\extras\ssl\cacert.pem"

 

크롬 드라이버 설치

크롬 드라이버를 설치합니다.

크롬 드라이버는 자신의 크롬 버전에 맞춰서 다운로드해야합니다. 현재 기준 최신은 102버전입니다. 

 

Selnium Grid 3 설치

Selenium Grid3설치 후, 파일은 크롬 드라이버와 같은 위치에 놓습니다. 

 

그리드 서버 실행 

java -jar selenium-server-standalone-3.141.59.jar

서버를 실행하게되면 localhost:4444 포트가 열리게 됩니다. 

 


PHP코드 작성

<?php

    use Facebook\WebDriver;

    require_once('./vendor/autoload.php');

    $host = "http://localhost:4444/wd/hub";

    $driver = Facebook\WebDriver\Remote\RemoteWebDriver::create($host, Facebook\WebDriver\Remote\DesiredCapabilities::chrome("./chromedriver.exe"));

    // IDとPWを含めて、Request
    $result = $driver->get("https://www.google.com");

    // フィルタリングのメインカテゴリーをクリック
    $driver->FindElement(WebDriver\WebDriverBy::xpath('/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/input'))->click();


    // keyboard操作
    $driver->getKeyboard()->sendKeys('Selenium');          // 検索フォームに検索語を入力
    $driver->getKeyboard()->pressKey("\xEE\x80\x87"); // ENTERを入力

    $driver->FindElement(WebDriver\WebDriverBy::xpath('//*[@id="kp-wp-tab-overview"]/div[1]/div/div/div/div/div/div[1]/div/div/div/span[2]/a'))->click();

    // idがmain_catである要素を全部読み込む
    $text = $driver->FindElements(WebDriver\WebDriverBy::linkText('<br>Selenium'));

    sleep(5);

    $driver->quit();
?>

$host는 위에서 실행한 selenium grid 주소를 입력해주는데, 3버전에서는 localhost:4444/wd/hub가 됩니다. 

 

Facebook\WebDriver\Remote\RemoteWebDriver::create($host, Facebook\WebDriver\Remote\DesiredCapabilities::chrome("./chromedriver.exe"));

$host와 크롬 드라이버의 값을 매개변수로 넣어주게 되면 사용할 준비가 완료됩니다. 

 

 

$result = $driver->get("https://www.google.com");

구글 URL에 접속 해서 

 

$driver->FindElement(WebDriver\WebDriverBy::xpath('/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/input'))->click();

 

xpath를 통해서 원하는 요소를 선택한뒤에 

click() 메소드를 이용하여 해당 요소를 클릭하도록 합니다.

 

위의 xpath가 가르키는 곳은 검색창입니다. 

 

$driver->getKeyboard()->sendKeys('Selenium');
$driver->getKeyboard()->pressKey("\xEE\x80\x87");

getKeyboard()의 sendKeys() 메소드를 이용하게되면, 키보드의 기능을 사용할 수 있게되어, 원하는 텍스트를 입력할 수 있습니다. 

 

pressKey() 메소드는 원하는 키를 누르도록 지정할 수 있습니다. 

"\xEE\x80\x87"는 ENTER키 입니다. 

 

즉, Selenium을 입력하고 엔터키를 누르는 코드입니다. 

 

$driver->FindElement(WebDriver\WebDriverBy::xpath('//*[@id="kp-wp-tab-overview"]/div[1]/div/div/div/div/div/div[1]/div/div/div/span[2]/a'))->click();

위의 xpath에서는 검색해서 나온 위키백과의 링크를 가르키고 해당 링크를 clilck()합니다. 

 

sleep(5);

$driver->quit();

sleep()를 이용해서 5초동안 멈추고, $driver->quit()로 브라우저를 종료시킵니다. 

 

 

실제 동작화면

 

참고 https://www.lambdatest.com/blog/selenium-php-tutorial/