Selenium WebDriver: сайтты тестілеуді роботқа тапсырыңыз

Автоматтандыру, автотесттер қазнетке аздап жат терминдер. Автотесттерден бұрын көптеген мекемелерде бағдарламаларды тексерумен айналысатын бөлімдер де жоқ. Бірақ бүгінгі біздің айтатынымыз ол туралы емес. Бүгінгі айтатынымыз веб беттердегі жасалатын іс әрекеттерді автоматтандыру. Ондай мүмкіндік беретін құралдардың ішіндегі ең кең таралғаны Selenium WebDriver. Оның басты себептері:
  • үйрену оңай;
  • көптеген бағдарламалау тілдері үшін қолжетімді (Java, C#, Python, Ruby, PHP, Perl. Javascript);
  • барлық дерлік кең таралған браузерлерді қолдайды (IE, Chrome, Firefox, Opera)

Сіз бұл құралмен, тышқанмен шерту, жолақтарды толтыру және тағы басқа көптеген әрекеттерді орындай аласыз. Құр сөзбен айтып жеткізу қиын, сондықтан мысал қарастырайық, google сайтында іздеу жүргізуді автоматтандырып көрейік. Алдымен сайтқа кіріп, нені автоматтандыру керек екенін қарап аламыз. Ол келесі қадамдардан тұрады екен:

1. Браузерді ашу
2. Google.com сайтына кіру
3. Іздеу жолағына мәтін теру
4. Іздеу

Енді осы әрекеттерді автоматтандырамыз, яғни, робот біз үшін іздеу жасайтын болады. Мен java тілінде жазатын боламын, әрине, әркім өз қалаған тілінде жаза алады (жоғарыда тілдердің тізімі келтірілді). Алдымен кодты жазатын проект құрып алайық.

Проектіні құру
java пайдаланбасаңыз бұл бөлімді тастап кетуіңізге болады

Проектіні құру үшін maven пайдаланамын. Айтайық проектіні D:\selenium деген папкада құрғымыз келеді. Сол папкада pom.xml деп аталатын файл құрамыз:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>MySel20Proj</groupId>
        <artifactId>MySel20Proj</artifactId>
        <version>1.0</version>
        <dependencies>
            <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-java</artifactId>
                <version>2.47.1</version>
            </dependency>
        </dependencies>
</project>


Осы папкада mvn clean install командасын орындаймыз. Ол барлық қажетті кітапханаларды жүктеп алуға мүмкіндік береді.


Код жазуды бастаймыз.

Енді код жазуды бастауға болады. Мен Intellij Idea-да жазатын боламын.
Алдымен проектіні ашып аламыз
1. Проектіні импорттауды таңдаймыз


2. Проект орналасқан папканы таңдау керек


3. Импорттау maven проектіден


4. Келесі қадамдардың барлығында үнсіз келісім бойынша қабылдаймыз.



Енді әр қимылды орындайтын кодтарды жазамыз. Ең бірінші браузерді ашуымыз керек. Ол үшін сәйкес браузерге арналған WebDriver объектісін құру жеткілікті:

WebDriver driver = new FirefoxDriver();


Осы жерде firefox драйвері ашылатын болады (егер браузер стандартты түрде орнатылған болса). Енді барлық веб бетте орындауға болатын іс әрекеттер (шерту, мәтін теру, жаңа бетке өту) осы driver объектісі арқылы жүргізіледі. Келесі әрекет ол google.com сайтына өту:

driver.get("http://google.com");


яғни get функциясы параметрде берілген адресті ашады. Драйвер бетті ашқан соң бет жүктеліп болғанша күтіп тұрады. Егер бет жүктелмей тұрып келесі әрекет жасалса, керек элементтерді таба алмай қалатын едік.

Енді іздеу жолағына мәтін теруіміз керек. Ол үшін драйверге ол элементтің қай жерде екенін айтуымыз керек. Оны біз локаторлар арқылы айта аламыз. Локаторлардың бірнеше түрлері бар: элементтің аты арқылы, id арқылы, стилі арқылы немесе xpath. Jquery-мен жұмыс жасағандар үшін бұл таныс дүние болу керек. Firebug немесе dev tools арқылы бізге қажет іздеу жолағын қалай табуға болатынын қарап көрейік:


Бізге пайдалы екі түрлі параметрі бар екен: id=«lst-ib» немесе name=«q». Яғни біз элементті екі екі түрлі әдістің бірімен таба аламыз:
WebElement element = driver.findElement(By.name("q"));

немесе
WebElement element = driver.findElement(By.id("lst-ib"));


Қайсысын пайдалансақ та, айырмашылығы жоқ. Табылған жолақта мәтінді былай енгізе аламыз:
element.sendKeys("Әйтеуір бір мәтін");


Содан соң, жай ғана Enter батырмасын басамыз, яғни, форманы серверге жібереміз:
element.submit();


Енді іздеудің шынайы түрде іске асқанын былай тексеруге болады:
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
    public Boolean apply(WebDriver d) {
        return d.getTitle().toLowerCase().startsWith("әйтеуір бір");
    }
});


Бұл код, браузердің бетіндегі тақырып "Әйтеуір бір" деп басталатын мәтінге өзгергенге дейін күтеді. Осылайша бізге қажет беттің ашылғанын тексере аламыз. Негізі бұл элементті немесе белгілі бір жағдайды күтудің бір әдісі. Қазірге оларды шетке қоя тұрамыз, егер қажет болса олар туралы жеке мақала жазуға болады. Енді ашылған браузерді жабу ғана қалды:
driver.quit();

Жалпы соңында сізде мынандай код жазылған болуы керек:


Енді жазылған кодымыз не істейтінін қарап көрейік:


Бірнеше қадамнан тұратын іс әрекетті автоматтандырдық. Шын өмірде әрине кодтар бұдан әлдеқайда көп болады. Мысалы, біздің компанияда автоматтандырылған тесттердің жиырма сағатқа жуық орындалатынын айта кеткен жөн.

Selenium-ді тек тестілеуге ғана емес кейбір әрекеттерді автоматтандыруға пайдалануға да болады. Мысалы, формаларды толтыру, сайттарды парсинг жасау және тағы да басқа. Мұндай қажеттілік, сайттарда роботтарға қарсы үлкен қарсылық көрсетіліп жатса қажет болуы мүмкін. Өйткені selenium-ді шын адамнан айыру қиын, ол адамның орындайтын іс әрекеттері деңгейінде жұмыс жасайды.

Selenium тек веб бет деңгейінде жұмыс жасайды, оған операциялық жүйенің мүмкіндіктері қол жетімсіз. Мысалы, оның көмегімен файл жүктеу және flash банерлермен жұмыс істеу мүмкін емес. Ол операциялық жүйенің терезелерімен жұмыс жасай алмайды. Келесі жолы, қолданылуы қиын, бірақ кез келген бағдарламаны (мобильді де) автоматтандыруға мүмкіндік беретін Sikuli туралы жазатын боламын.

Автоматтандыру бұл қазіргі кезде жеке сала. Онымен компанияда арнайы бір адам немесе команда айналысады. Олар кәдімгі бағдарламалаушылар, бірақ олар бағдарламаның өзін емес, оған арналған тесттерді жазады. Қазақстанда бұл мамандық кең тарала қойған жоқ, бірақ шетелде және Ресейде кең таралып, қолданысқа еніп келеді.

Мұнда автотесттерге жай қысқаша шолу жасалды. Егер толығырақ танысқыңыз келсе http://www.seleniumhq.org/docs/ сайтынан мәліметтерді таба аласыз. Немесе маған жекеге жазсаңыз да болады.

  • +3
12 пікір
yerbol89
raimbek сайтты қалай құлатуға болатындығын жазып қойыпсың ғой. :) 80 портқа 1 компьютерден секундына кемінде 50-100 сұраныс жіберілетін болса, Apache-нің мамалағаны былай тұрсын жалп етіп құлап қалады ғой. Енді 1 IP-тен тек секундына 10-20 сұраныс ғана жіберілетінін, егер одан асып кетіп жатса ip-tables-ке банға салып қой деген шартты серверімізге жазып қоймасақ болмайды точно топ ете қалады серверіміз.
Тек тіркелген қолданушылар ғана пікір қалдыра алады.