Робота з Webdriver (ч.4, робота з історією, cookies та перетаскуванням)

Навігація: Історія і розташування

Раніше ми розглядали перехід до сторінки за допомогою команди “GET” (driver.get (“http://www.example.com”)) Як ви бачили, WebDriver має ряд менших інтерфейсів, і навігація стає корисною справою. Тому що завантаження сторінки – це основна вимога, метод, що робить це вбудований в інтерфейс WebDriver, і є простим синонімом до:

driver.navigate().to("http://www.example.com");
driver.navigate.to "http://www.example.com"
driver.get("http://www.example.com")  # python doesn't have driver.navigate

Повторимо ще раз: “navigate().to()” і “get()” роблять те ж саме. Просто один з них набагато простіше вводити, ніж інший.

“Переміщення” інтерфейсом також має на увазі можливість рухатися вперед і назад в історії вашого браузера:

driver.navigate().forward();
driver.navigate().back();
driver.navigate.forward
driver.navigate.back
driver.forward()
driver.back()

Майте на увазі, що ця функція повністю залежить від вашого браузера. Є можливість, що щось несподіване станеться, коли ви визиваєте ці методи, якщо ви звикли до поведінки одного браузера, а перейшли до іншого.


Cookies

Перш, ніж ми почнемо наступні кроки, ви можете бути зацікавлені в розумінні того, як використовувати cookies. Насамперед, ви повинні бути впевнены, що cookies будуть дійсними. Якщо ви намагаєтеся встановити cookies, перш ніж почати взаємодію з сайтом і стартова сторінка велика або потрібен час, щоб завантажити її, альтернативою буде знайти меншу сторінку на сайті – це, як правило, сторінка 404 (http://example.com/some404page)

// Go to the correct domain
driver.get("http://www.example.com");

// Now set the cookie. This one's valid for the entire domain
Cookie cookie = new Cookie("key", "value");
driver.manage().addCookie(cookie);

// And now output all the available cookies for the current URL
Set allCookies = driver.manage().getCookies();
for (Cookie loadedCookie : allCookies) {
    System.out.println(String.format("%s -> %s", loadedCookie.getName(), loadedCookie.getValue()));
}

// You can delete cookies in 3 ways
// By name
driver.manage().deleteCookieNamed("CookieName");
// By Cookie
driver.manage().deleteCookie(loadedCookie);
// Or all of them
driver.manage().deleteAllCookies();
# Go to the correct domain
driver.get("http://www.example.com")

# Now set the cookie. Here's one for the entire domain
# the cookie name here is 'key' and its value is 'value'
driver.add_cookie({'name':'key', 'value':'value', 'path':'/'})
# additional keys that can be passed in are:
# 'domain' -> String,
# 'secure' -> Boolean,
# 'expiry' -> Milliseconds since the Epoch it should expire.

# And now output all the available cookies for the current URL
for cookie in driver.get_cookies():
    print "%s -> %s" % (cookie['name'], cookie['value'])

# You can delete cookies in 2 ways
# By name
driver.delete_cookie("CookieName")
# Or all of them
driver.delete_all_cookies()
# Go to the correct domain
driver.get "http://www.example.com"

# Now set the cookie. Here's one for the entire domain
# the cookie name here is 'key' and its value is 'value'
driver.manage.add_cookie(:name => 'key', :value => 'value')
# additional keys that can be passed in are:
# :path => String, :secure -> Boolean, :expires -> Time, DateTime, or seconds since epoch

# And now output all the available cookies for the current URL
driver.manage.all_cookies.each { |cookie|
    puts "#{cookie[:name]} => #{cookie[:value]}"
}

# You can delete cookies in 2 ways
# By name
driver.manage.delete_cookie "CookieName"
# Or all of them
driver.manage.delete_all_cookies

Зміна агента користувача

Це легко зробити з драйвером Firefox, про який ми поговоримо в наступній статті.

FirefoxProfile profile = new FirefoxProfile();
profile.addAdditionalPreference("general.useragent.override", "some UA string");
WebDriver driver = new FirefoxDriver(profile);
profile = Selenium::WebDriver::Firefox::Profile.new
profile['general.useragent.override'] = "some UA string"
driver = Selenium::WebDriver.for :firefox, :profile => profile
profile = webdriver.FirefoxProfile()
profile.set_preference("general.useragent.override", "some UA string")
driver = webdriver.Firefox(profile)

Перетягування елементів
Ось приклад використання класу дій для виконання перетягування. Власні події повинні бути включені.

WebElement element = driver.findElement(By.name("source"));
WebElement target = driver.findElement(By.name("target"));

(new Actions(driver)).dragAndDrop(element, target).perform();
element = driver.find_element(:name => 'source')
target = driver.find_element(:name => 'target')

driver.action.drag_and_drop(element, target).perform
from selenium.webdriver.common.action_chains import ActionChains
element = driver.find_element_by_name("source")
target =  driver.find_element_by_name("target")

ActionChains(driver).drag_and_drop(element, target).perform()