Робота з WebDriver (ч.1, встановлення та запуск)

Введення у WebDriver
Основним нововведенням Selenium 2.0 є інтеграція з WebDriver API. WebDriver призначений для забезпечення більш простого і лаконічного інтерфейсу програмування в додаток до рішення деяких обмежень у API Selenium-RC. Selenium-WebDriver був розроблений, щоб краще підтримувати динамічні веб-сторінки, де елементи сторінки можуть бути змінені без перезавантаження сторінки. Selenium-WebDriver робить прямі виклики до браузера, використовуючи вбудовану підтримку кожного браузера для автоматизації.

Налаштування Selenium-WebDriver
Щоб встановити Selenium потрібно створити проект, так що ви можете написати програму, використовуючи Selenium. Як це зробити, залежить від мови програмування і середовища розробки.


Java
Найпростіший спосіб створити Java проект з Selenium 2.0 є використання Maven. Maven буде завантажувати Java прив’язки (клієнтська бібліотека Selenium), і всі його залежності, і створить для Вас проект, використовуючи файл Maven pom.xml (конфігураційний файл проекту). Після того як ви зробили це, ви можете імпортувати проект Maven в потрібну IDE – IntelliJ IDEA або Eclipse. По-перше, створити папку для зберігання файлів проекту Selenium. Потім, щоб використовувати Maven, Вам потрібний файл pom.xml. Він може бути створений за допомогою текстового редактора. Ми не будемо вчити деталі файлів pom.xml або для використання Maven, так як є вже відмінні рекомендації на цей рахунок. Ваш 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.45.0</version>
            </dependency>
        </dependencies>
</project>

Переконайтеся, що ви вказати останню версію. У момент написання версія, що наведена вище, була останньою, проте були часті релізи відразу після виходу Selenium 2.0. Перевірте сторінку завантаження Maven для поточної версії і відредагуйте вище зазначену залежність відповідно.

Тепер з командного рядка, перейдіть в папку проекту і запустіть Maven наступним чином.
mvn clean install

Це скачає Selenium і всі його залежності і додасть їх у проект. Нарешті, імпортуйте проект в будь-яке середовище розробки.


C#

Як і Selenium 2.2.0, в С# прив’язки поширюються у вигляді набору бібліотек DLL поряд з іншими DLL-залежностями. До 2.2.0, всі Selenium бібліотек були без підпису. Щоб включити Selenium у вашому проекті, просто завантажте останню версію Selenium Dotnet з архіву. Якщо ви використовуєте Windows Vista або вище, ви повинні розблокувати файл перед його розпакуванням: Клацніть правою кнопкою миші на ZIP файлі, натисніть кнопку “Властивості”, натисніть “Розблокувати” і натисніть “OK”.

Розпакуйте вміст архіву і додайте посилання на кожну з розпакованих бібліотек DLL в ваш проект в Visual Studio (або вашої IDE вибору).


Python

Якщо ви використовуєте Python для автоматизації тестування, то ви, мабуть, вже знайомі з розробкою в Python. Щоб додати Selenium в середовище Python виконайте наступну команду з командного рядка.
pip install selenium


Ruby
Щоб додати Selenium в середовище Ruby, виконайте наступну команду з командного рядка.
gem install selenium-webdriver


Приклад роботи Selenium-WebDriver API

WebDriver це інструмент для автоматизації тестування веб-додатків і, зокрема, щоб переконатися, що вони працюють, як і очікувалося. Його метою є надання API, який легко вивчити і зрозуміти, простіше у використанні, ніж Selenium-RC (1,0) API, які допоможуть зробити ваші тести легшими. Це не пов’язано з будь-якою конкретною структурою тесту, так що він може бути використаний в рівній мірі в модульному тестуванні або з методом основного тестування. Почніть з створення проекту WebDriver, якщо ви ще цього не зробили.
Після того, як ваш проект буде створений, ви можете побачити, що WebDriver діє так само, як будь-яка інша бібліотека.

Тепер ви готові написати код. Найпростіший спосіб, щоб почати це приклад, який шукає слово “cheese” в пошуковій системі Google і потім виводяться назви сторінок результатів на консоль.

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

public class Selenium2Example  {
    public static void main(String[] args) {
        // Create a new instance of the Firefox driver
        // Notice that the remainder of the code relies on the interface, 
        // not the implementation.
        WebDriver driver = new FirefoxDriver();

        // And now use this to visit Google
        driver.get("http://www.google.com");
        // Alternatively the same thing can be done like this
        // driver.navigate().to("http://www.google.com");

        // Find the text input element by its name
        WebElement element = driver.findElement(By.name("q"));

        // Enter something to search for
        element.sendKeys("Cheese!");

        // Now submit the form. WebDriver will find the form for us from the element
        element.submit();

        // Check the title of the page
        System.out.println("Page title is: " + driver.getTitle());
        
        // Google's search is rendered dynamically with JavaScript.
        // Wait for the page to load, timeout after 10 seconds
        (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                return d.getTitle().toLowerCase().startsWith("cheese!");
            }
        });

        // Should see: "cheese! - Google Search"
        System.out.println("Page title is: " + driver.getTitle());
        
        //Close the browser
        driver.quit();
    }
}
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;

// Requires reference to WebDriver.Support.dll
using OpenQA.Selenium.Support.UI;

class GoogleSuggest
{
    static void Main(string[] args)
    {
        // Create a new instance of the Firefox driver.

        // Notice that the remainder of the code relies on the interface, 
        // not the implementation.

        // Further note that other drivers (InternetExplorerDriver,
        // ChromeDriver, etc.) will require further configuration 
        // before this example will work. See the wiki pages for the
        // individual drivers at http://code.google.com/p/selenium/wiki
        // for further information.
        IWebDriver driver = new FirefoxDriver();

        //Notice navigation is slightly different than the Java version
        //This is because 'get' is a keyword in C#
        driver.Navigate().GoToUrl("https://www.google.com/");

        // Find the text input element by its name
        IWebElement query = driver.FindElement(By.Name("q"));

        // Enter something to search for
        query.SendKeys("Cheese");

        // Now submit the form. WebDriver will find the form for us from the element
        query.Submit();

        // Google's search is rendered dynamically with JavaScript.
        // Wait for the page to load, timeout after 10 seconds
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
        wait.Until((d) => { return d.Title.ToLower().StartsWith("cheese"); });

        // Should see: "Cheese - Google Search"
        System.Console.WriteLine("Page title is: " + driver.Title);

        //Close the browser
        driver.Quit();
    }
}
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0

# Create a new instance of the Firefox driver
driver = webdriver.Firefox()

# go to the google home page
driver.get("http://www.google.com")

# the page is ajaxy so the title is originally this:
print driver.title

# find the element that's name attribute is q (the google search box)
inputElement = driver.find_element_by_name("q")

# type in the search
inputElement.send_keys("cheese!")

# submit the form (although google automatically searches now without submitting)
inputElement.submit()

try:
    # we have to wait for the page to refresh, the last thing that seems to be updated is the title
    WebDriverWait(driver, 10).until(EC.title_contains("cheese!"))

    # You should see "cheese! - Google Search"
    print driver.title

finally:
    driver.quit()
require 'rubygems'
require 'selenium-webdriver'

driver = Selenium::WebDriver.for :firefox
driver.get "http://google.com"

element = driver.find_element :name => "q"
element.send_keys "Cheese!"
element.submit

puts "Page title is #{driver.title}"

wait = Selenium::WebDriver::Wait.new(:timeout => 10)
wait.until { driver.title.downcase.start_with? "cheese!" }

puts "Page title is #{driver.title}"
driver.quit

У наступних розділах ви дізнаєтеся більше про те, як використовувати WebDriver для таких речей, як навігація вперед і назад в історії вашого браузера, і як перевірити веб-сайти, які використовують фрейми (кадри) і вікна.