web-dev-qa-db-fra.com

Python a-t-il quelque chose comme Capybara / Concombre?

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.

41
machineghost

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 .

22
D_Bye

A. Concombre comme: (comme l'anglais)

  • Laitue (cornichon d'approche) ou
  • Comportez-vous (Approach Gherkin) ou
  • Robotframework (Approche basée sur mot-clé) (Informations supplémentaires: RF est plus grand que les critères anglais). Il est basé sur des mots-clés et offre de nombreuses méthodes d'assistance et des bibliothèques intégrées. Excellent éco-système pour les bibliothèques externes. Tout python peut également être modifié et utilisé avec RF)
  • Freshen (Approach Gherkin) ou
  • Pois (cornichon d'approche) ou
  • 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:

  • Il fournit une abstraction sur le sélénium
  • la saisie d'arguments dans les méthodes de cette bibliothèque est beaucoup plus simple. L'abstraction fournie par la bibliothèque, par exemple, cache de nombreux détails inutiles pour trouver des éléments. Pour plus de détails, il faut comprendre la bibliothèque
  • Il est possible d'utiliser cette bibliothèque en dehors du contexte du framework de robot en tant que tel sans aucune modification, bien qu'il puisse utiliser des utilitaires du package robot. (C'est votre devoir de faire d'autres expériences avec cette bibliothèque, sur cette note!)
  • Par conséquent, peut être utilisé comme une bibliothèque autonome pour votre framework.

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:

  • Il fournit un support "d'abstraction de pageobject" au-dessus de Selenium2Library
  • Il est possible d'utiliser cette bibliothèque en dehors du contexte du framework de robot en tant que tel sans aucune modification, bien qu'il puisse utiliser des utilitaires du package robot. (C'est votre devoir de faire d'autres expériences sur cette note!)
  • Par conséquent, peut être utilisé comme une bibliothèque autonome

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:

  • Il est [~ # ~] pas [~ # ~] possible d'utiliser cette bibliothèque en dehors du contexte du cadre du robot. Un changement mineur dans la façon dont le contexte de la page est géré aiderait cette bibliothèque à être utilisée en dehors du contexte du cadre du robot (c'est votre devoir pour savoir comment!)

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

  • Formats anglais comme cornichon, mot-clé, tabulaire etc.
  • signaler un test
  • accrochage au CI
  • mise en place/démontage des cas de test et des suites de tests
  • balisage des cas de test
  • d'autres fonctionnalités que l'on pourrait penser à tout cadre de test

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

19
Steve Harrison

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.

12
Jim Stewart

Que diriez-vous de Robot Framework. C'est assez génial. Et avec Selenium2Library, cela fonctionne très bien avec SE2. http://robotframework.org/

9
Aaron

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é.

8
Brandon Rhodes

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

https://github.com/rlisagor/freshen

7
Tony S.

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()
3
Michael Herrmann