Ruby a cette excellente couche d'abstraction au-dessus du sélénium appelée Capybara, que vous pouvez utiliser pour effectuer des tests fonctionnels/d'acceptation/d'intégration. Il possède également une autre bibliothèque appelée Cucumber qui va plus loin et vous permet d'écrire des tests en anglais.
Les deux bibliothèques sont construites au-dessus de Selenium et peuvent être utilisées pour tester avec n'importe quel navigateur majeur, mais en raison de leurs couches d'abstraction, il est super facile d'écrire des tests en les utilisant (enfin, aussi faciles que les tests fonctionnels le sont).
Ma question est: est-ce que Python a quelque chose comme ça? J'ai trouvé des Pythonistas faisant des tests fonctionnels avec divers outils mais ...
A) Splinter: n'utilise pas Selenium (et n'a pas de pilote IE)
- EDIT - Il semble que Spliter utilise désormais du sélénium (voir les réponses ci-dessous).
B) Alfajor: n'a pas été mis à jour depuis plus d'un an; semble mort
C) Sélénium (brut): beaucoup de gens semblent utiliser directement le sélénium, mais il semble qu'une couche d'abstraction pourrait le rendre beaucoup plus facile à utiliser
Alors, quelqu'un connaît-il quelque chose comme Capybara, ou mieux encore comme Cucumber, pour Python (il n'a pas à utiliser réellement Selenium, mais il doit prendre en charge tous les principaux navigateurs))?
* MODIFIER *
Pour ceux qui ne connaissent pas Capybara, il ajoute simplement une API afin qu'au lieu de l'API Selenium normale, vous puissiez faire quelque chose comme ceci:
When /I sign in/ do
within("#session") do
fill_in 'Login', :with => '[email protected]'
fill_in 'Password', :with => 'password'
end
click_link 'Sign in'
end
Il est utilisé par Cucumber, qui vous permet d'abréger davantage (presque en anglais):
Scenario Outline: Add two numbers
Given I have entered <input_1> into the calculator
And I have entered <input_2> into the calculator
When I press <button>
Then the result should be <output> on the screen
Examples:
| input_1 | input_2 | button | output |
| 20 | 30 | add | 50 |
J'AIMERAIS un Python équivalent de concombre, mais même juste un équivalent de Capybara serait utile.
Vous pouvez tester Python code en utilisant Cucumber - voir Cucumber wiki sur github pour plus d'informations.
Si vous voulez une solution pure Python, consultez Laitue . Je ne l'ai jamais utilisée, mais il y a une entrée de blog assez utile à ce sujet et un éclat - ici .
A. Concombre comme: (comme l'anglais)
RedwoodHQ (Approche basée sur des mots clés) (RedwoodHQ a des fonctionnalités plus grandes que les critères de type anglais et encapsule les fonctionnalités suivantes: Cadre de test basé sur des mots clés et basé sur le Web, prend en charge python comme l'une des langues et Informations supplémentaires sur RedwoodHQ: Théoriquement c'est possible, toutes les bibliothèques intégrées de cadre de robot existantes et toutes les bibliothèques de test externes de cadre de robot ou d'ailleurs n'importe quelle bibliothèque python, peut être appelée ou utilisé à partir de ce cadre de test basé sur le Web avec peu de modifications)
Jauge (approche Gherkin): Référence pour python: ( https://gauge-python.readthedocs.io/en/latest/index .html )
Sous le concombre, on pourrait avoir Capybara comme une couche d'abstraction qui cache/regroupe de nombreuses actions de sélénium
B. Capybara comme: (Abstraction: masque/action de groupes)
Par exemple pour cliquer sur un élément, il suffit de fournir une commande comme click (locator) au lieu de travailler avec raw Selenium api
, où il faut trouver un élément puis cliquer. De nombreuses autres abstractions de ce type existent dans les bibliothèques facultatives ci-dessous
Ma recherche: Il en existe presque une demi-douzaine. actif, b. options matures développées.
python est livré avec une variété de piles incluses !!
Option-1: --- (Selenium2Library
URL Github:https://github.com/rtomac/robotframework-Selenium2library
Développement: Actif
But: l'une des nombreuses bibliothèques de robotframework
, peut également être utilisée comme bibliothèque "autonome" pour votre framework (vérifiez par exemple ci-dessous pour l'utilisation).
Réflexions:
Utilisation:
pip installer robotframework-Selenium2library
importer dans votre console ipython ou inactive et commencer à jouer, par exemple:
>>from Selenium2Library import Selenium2Library
>>start_testing= Selenium2Library()
>>start_testing.create_webdriver("Firefox")
>>start_testing.go_to("http://www.google.com")
>>.
...so on
Option-2: Pageobjects
URL Github:https://github.com/ncbi/robotframework-pageobjects
Développement: InActive (pas d'arrêt avec la dernière version)
Objectif: L'une des bibliothèques de robotframework
. Fournit une abstraction d'objet de page sur Selenium2Library
. Peut être utilisé comme autonome pour votre cadre (vérifiez par exemple ci-dessous pour l'utilisation) ou peut être utilisé avec le cadre du robot.
Réflexions:
Utilisation:
pip installer robotframework-pageobjects
par exemple: en ipython ou inactif, faites:
>>from robotpageobjects import Page
>>start_testing=Page()
>>start_testing.create_webdriver("Firefox")
>>start_testing.go_to("http://google.com")
Option-3: robotframework-pageobjectlibrary
Github Url:https://github.com/boakley/robotframework-pageobjectlibrary
Développement: Actif
J'espère que l'auteur prend en charge le LTS (Long Term Support):)), les doigts croisés !!
Utilisation:
pip installer robotframework-pageobjectlibrary
Réflexions:
Option-4: Splinter
URL Github:https://github.com/cobrateam/splinter
Développement: Actif
Utilisation: splinter.readthedocs.org/en/latest/index.html
pip installer un éclat
Sur ipython ou inactif, faites:
>>from splinter import Browser
>>browser = Browser()
>>browser.visit('http://google.com')
>>browser.fill('q', 'splinter - python acceptance testing for web applications')
>>browser.find_by_name('btnG').click()
Option-5: bibliothèque SST
URL Github:https://github.com/Work4Labs/Selenium-simple-test
Développement: Fonctionnalité complète/active
Utilisation: testutils.org/sst/
pip install -U sst
sur ipython ou inactif:
>>> from sst.actions import *
>>> start()
Starting Firefox
>>> go_to('http://google.com')
Going to... http://google.com
Waiting for get_element
Option-6: hélium Pas open source (Commercial)
Option-7: holmium.core
URL Github:https://github.com/alisaifee/holmium.core
Option-8: wtframework
URL Github:https://github.com/wiredrive/wtframework
Option-9: webium
URL Github:https://github.com/wgnet/webium
Option-10: élémentium
URL Github:https://github.com/actmd/elementium
Option-11: saunter
URL Github:https://github.com/Element-34/py.saunter
Utilisation:saunter
Option-12: webdriverplus
URL Github:https://github.com/tomchristie/webdriverplus
Utilisation:webdriverplus
Commentaires: référentiel non maintenu mais référence décente
Option-12: Simple-Pageobject
URL Github:https://github.com/rama-bornfree/simple-pageobject/tree/master/PageObjectLibrary
Commentaires: Le wrapper pageobject le plus simple construit autour de Selenium2library. Je suis propriétaire du repo
Configuration de test:
"Toutes" les bibliothèques de test de l'Option-1-13; peut être exécuté à l'aide de l'un des cadres suivants: Lettuce, Behave, Robotframework
ou d'ailleurs, tout framework de test unitaire (par exemple PyUnit
, Nose
) ... ainsi de suite.
Le cadre de test est généralement utilisé pour gérer les cas de test, par exemple
Ce qui importe , c'est à quel point on se sent à l'aise avec les bibliothèques dans les options ci-dessus.
Option-5: En ce qui concerne SST
, il possède les caractéristiques d'un framework lui-même, par exemple, il peut générer des rapports et faire bien d'autres choses.
Ainsi, la définition de la bibliothèque et du framework dans le cas de SST est floue, selon l'étendue des fonctionnalités que l'on souhaite utiliser à partir de ce package
Quelques maths pour le plaisir:
Nombre total de façons dont on peut avoir un bon , mauvais , et laid Test-setup = (framework de test ET bibliothèque de test + votre code personnalisé pris en sandwich b/w le framework et la bibliothèque):
7 * 13 = 91 façons
Choisissez la meilleure combinaison (de framework de test et de bibliothèque de test) qui convient à ceux dont vous avez besoin !!
Je choisirais personnellement Robot-framework avec Selenium2Library ou Robot-framework avec une bibliothèque de pageobject
bien sûr, je suis penché et biaisé positivement dans mon article sur le robot-framework et Selenium2Library
Alors que l'OP était heureux de trouver un Python équivalent de concombre, ce qui m'a amené ici était le titre de la question: a Python équivalent de Capybara. Alors que Cucumber utilise Capybara, Le concombre lui-même est une "solution" totalement différente qui n'est qu'incidemment liée à Capybara.
Si vous cherchez quelque chose comme Capybara sans avoir à faire face au concombre, consultez splinter . Je ne sais pas ce qui était vrai lorsque la question a été publiée, mais Splinter est maintenant construit sur Selenium et prend également en charge d'autres moteurs (Webkit, PhantomJS, zope.browsertest et autres) et prend en charge les tests visuels et sans tête.
Que diriez-vous de Robot Framework. C'est assez génial. Et avec Selenium2Library, cela fonctionne très bien avec SE2. http://robotframework.org/
Il existe maintenant un portage de Capybara lui-même vers Python:
https://github.com/elliterate/capybara.py
Vous pouvez trouver sa documentation ici:
https://elliterate.github.io/capybara.py/
Capybara vous aide à tester des applications Web en simulant comment un véritable utilisateur interagirait avec votre application. Il est indépendant du pilote exécutant vos tests et est livré avec le support Selenium intégré.
Avez-vous vérifié les produits frais ou les pois?
Pea n'utilise pas la syntaxe de concombre, mais l'auteur dit que c'est plus facile https://github.com/gfxmonk/pea
Et Freshen essaie de cloner la syntaxe et les fonctionnalités de Cucumber
L'OP a demandé Python implémentations de Cucumber ou Capybara mais comme Jim Stewart l'a souligné dans sa réponse , Cucumber et Capybara sont des choses très différentes. Depuis le titre de la question concerne Capybara, c'est ce à quoi je vais répondre.
Je suis l'un des développeurs d'un wrapper Selenium commercial appelé Helium . Comme Capybara, il propose une API de très haut niveau pour l'automatisation web. Par exemple, voici un script qui met à jour votre statut Facebook:
from helium.api import *
start_chrome("facebook.com")
write(your_fb_email, into="Email or Phone")
write(your_fb_password, into="Password")
click("Log In")
write("Test", into="Update Status")
click("Post")
Les appels vers Helium peuvent être librement mélangés avec les appels vers Selenium. Par exemple. nous pourrions étendre le script ci-dessus en:
# get_driver() returns the WebDriver created by start_chrome() above.
chrome = get_driver()
chrome.find_element_by_id('btnG').click()