Заголовок немного неверный, но не знал как написать лучше. На самом деле мы будем сравнивать байндинги языков для вебдрайвера.
В качестве единого теста для всех будет использоваться один сценарий:
- Открываем страницу http://yopolis.ru/site/login
- Вводим данные для авторизации
- Кликаем по кнопке войти
- Проверяем что присутствует элемент со ссылкой на профиль пользователя
Итак код теста:
Java:
package com.yopolis.tests;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.seleniumhq.selenium.fluent.FluentWebDriver;
import org.seleniumhq.selenium.fluent.Period;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.openqa.selenium.By.*;
import static org.seleniumhq.selenium.fluent.Period.secs;
public class YopolisExample {
Long start=null;
WebDriver wd=null;
FluentWebDriver fwd=null;
Long stop =null;
@Before
public void setUp(){
start = System.currentTimeMillis();
wd = new FirefoxDriver();
fwd = new FluentWebDriver(wd);
}
@Test
public void firstTest(){
wd.get("http://yopolis.ru/site/login");
fwd.input(id("LoginForm_username")).sendKeys("****@yandex.ru");
fwd.input(name("LoginForm[password]")).sendKeys("******");
fwd.button(name("yt0")).click();
assertThat(fwd.within(secs(5)).has().link(xpath("//a[contains(@href,'/profile')]")),is(true));
}
@After
public void tearDown(){
wd.close();
stop = System.currentTimeMillis();
System.out.println("That took " + (double)((stop - start)/1000) + " seconds");
}
}
Ruby:
require('selenium/webdriver')
beginning = Time.now
wd= Selenium::WebDriver.for :firefox
wd.navigate.to "http://yopolis.ru/site/login"
wd.find_element(:id,'LoginForm_username').send_keys "****@yandex.ru"
wd.find_element(:name,'LoginForm[password]').send_keys "******"
wd.find_element(:name,'yt0').click
puts wd.find_element(:xpath,'//a[contains(@href,"/profile")]').displayed?
wd.close
puts "Time elapsed #{Time.now - beginning} seconds"
Python:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from datetime import datetime
startTime = datetime.now()
driver = webdriver.Firefox()
driver.get("http://yopolis.ru/site/login")
driver.find_element_by_id("LoginForm_username").send_keys("****@yandex.ru")
driver.find_element_by_name("LoginForm[password]").send_keys("******")
driver.find_element_by_name("yt0").click()
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.XPATH,'//a[contains(@href,"/profile")]')))
driver.quit()
print(datetime.now()-startTime)
WebDriverJs:
var assert=require('assert');
var webdriver = require('selenium-webdriver'),
SeleniumServer = require('selenium-webdriver/remote').SeleniumServer;
var server = new SeleniumServer('/Users/aalekseev/selenium-server-standalone-2.37.0.jar', {
port: 4444
});
server.start();
console.time('test exec');
var driver = new webdriver.Builder().
usingServer(server.address()).
withCapabilities(webdriver.Capabilities.firefox()).
build();
driver.get("http://yopolis.ru/site/login");
driver.findElement(webdriver.By.id("LoginForm_username")).sendKeys("****@yandex.ru");
driver.findElement(webdriver.By.name("LoginForm[password]")).sendKeys("******");
driver.findElement(webdriver.By.name("yt0")).click();
var disp=driver.findElement(webdriver.By.xpath('//a[contains(@href,"/profile")]')).isDisplayed();
assert.ok(disp);
driver.quit().then(function(){
console.timeEnd('test exec');
});
server.stop();
PHP:
Используется: php-webdriver
$start = time();
$capabilities = array(WebDriverCapabilityType::BROWSER_NAME => 'firefox');
$driver = RemoteWebDriver::create('http://localhost:4444/wd/hub', $capabilities);
$driver->get("http://yopolis.ru/site/login");
$driver->findElement(WebDriverBy::id('LoginForm_username'))->sendKeys("****@yandex.ru");
$driver->findElement(WebDriverBy::name('LoginForm[password]'))->sendKeys("******");
$driver->findElement(WebDriverBy::name('yt0'))->click();
try {
echo $driver->findElement(WebDriverBy::xpath('//a[contains(@href,"/profile")]'))->isDisplayed();
} catch (NoSuchElementWebDriverError $e) {
}
$driver->close();
echo "Time elapsed ".(time()-$start)." seconds";
Результаты:
Java: 14 секунд
Ruby: 8 секунд
Python: 7 секунд
JS: 20 секунд
PHP: 9 секунд