Заголовок немного неверный, но не знал как написать лучше. На самом деле мы будем сравнивать байндинги языков для вебдрайвера.
В качестве единого теста для всех будет использоваться один сценарий:
Java:
Используется: php-webdriver
Ruby: 8 секунд
Python: 7 секунд
JS: 20 секунд
PHP: 9 секунд
В качестве единого теста для всех будет использоваться один сценарий:
- Открываем страницу 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 секунд
Этот комментарий был удален автором.
ОтветитьУдалитьПришлось удалить прошлый комментарий - парсер лох.
ОтветитьУдалитьДобавьте в сравнение PHP:
git clone https://github.com/facebook/php-webdriver.git
Запустить этот файл:
https://gist.github.com/DavertMik/7488648
В понедельник обязательно добавлю)
УдалитьГотово) сори за задержку,
Удалить