English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Lorsque l'entreprise effectue un codereview, elle limite le temps de consultation du code, en fait, beaucoup de code est généré automatiquement par le cadre et n'a pas besoin de beaucoup de temps pour être regardé. Pour atteindre les normes, il faut passer du temps (cliquer sur des zones fixes du site web). Je pense que je peux utiliser des méthodes de tests automatisés pour accomplir ce travail physique inutile.
Tout d'abord, clarifions les besoins :
Je pense à deux solutions, sikuli ou python+selenium. Les avantages de sikuli sont des opérations logiques simples et directes, utilisant des images comme indicateurs, mais les inconvénients sont que les fenêtres doivent être fixes et qu'elles ne peuvent pas fonctionner en arrière-plan. Selenium est plus complexe, mais il fonctionne rapidement et les fenêtres peuvent être masquées.
Voici un simple enregistrement de l'utilisation de Python+Petit exemple de selenium.
L'utilisation de la version de Python3.3ainsi que selenium2,Environnement Windows (actuellement pris en charge3.0 et supérieur, de nombreux forums et blogs n'ont pas été mis à jour).
Tout d'abord, l'installation du logiciel, Python n'a pas besoin d'être expliqué en détail, n'oubliez pas de configurer les variables d'environnement.
Voici l'installation de selenium, si pip est déjà installé. Exécutez simplement la commande suivante.
pip install -U selenium
Une autre méthode,https://pypi.python.org/packages/source/s/selenium/selenium-2.52.0.tar.gzTélécharger et décompresser. Voici une brève description de la version Windows, en fait, c'est aussi similaire sous Unix, utilisez Wget pour télécharger et installer.
使用命令(setup一般用于第三方模块的安装):
Utilisez la commande (setup est généralement utilisé pour l'installation de modules tiers) :3cd c:\Python \xxxx
python setup.py install
Pendant l'installation, il peut y avoir un ImportError: No module named setuptools, c'est parce que le module setuptools manque, Python ne l'installe pas par défaut.http://pypi.python.org/pypi/setuptoolsLes packages et les guides d'installation pour divers systèmes sont fournis ci-dessus. Pour le système Windows, téléchargezhttps://bootstrap.pypa.io/ez_setup.pyScript d'installation automatique.
Exécutez :
python ez_setup.py
Ensuite, installez Selenium.
Je vais expliquer simplement le processus avec un exemple personnel.
La première étape consiste à ouvrir le navigateur.
selenium2Il combine Selenium et webdriver, importez directement les pilotes correspondants des navigateurs, ouvrez-les. Notez que le pilote Chrome peut nécessiter une installation séparée.
from selenium import webdriver browser = webdriver.Firefox() browser.get('https://www.xxx.com')
Après avoir ouvert la page Web, vous devez vous connecter, F12Ouvrez le débuggeur du navigateur, sélectionnez l'élément avec la petite flèche, regardez les attributs du champ de connexion et du mot de passe, généralement ils ont un ID. Selenium peut obtenir des éléments par les méthodes suivantes et effectuer diverses opérations, pour plus de détails, voir le document de lien ci-dessus :
Dans lequel l'ID est le plus efficace et pratique, privilégier. Après avoir sélectionné l'élément, vous pouvez utiliser l'API WebDriver pour simuler les entrées du clavier et les clics de la souris. Le code est le suivant :
username="qun" passwd="passwd" browser = webdriver.Firefox() browser.get('https://www.xxx.com') browser.implicitly_wait(10) elem=browser.find_element_by_id("loginFormUserName") elem.send_keys(username) elem=browser.find_element_by_id("loginFormPassword") elem.send_keys(passwd) elem=browser.find_element_by_id("loginFormSubmit") elem.click()
Généralement, après la connexion, la page se redirige vers une nouvelle page. Comment obtenir cette nouvelle page ? Ici, il y a le concept de gestionnaire de fenêtre, pour effectuer le basculement du gestionnaire de fenêtre. Attention ! Parfois, lorsque l'élément est dans un cadre, il est également nécessaire de passer par switch. Une fonction wait apparaît ici (voir également ci-dessus), car le chargement de la page nécessite du temps, il est possible que l'élément ne soit pas chargé immédiatement après le clic, je l'expliquerai en détail dans la prochaine section.
browser.implicitly_wait(10) browser.switch_to_window(browser.window_handles[-1]
Après avoir sélectionné la zone à cliquer, ici, xpath est utilisé pour la localisation, car au cours du processus de test automatisé, il est possible que l'élément ne puisse pas être localisé par des méthodes telles que id, name (beaucoup de gens ne l'écrivent pas, aiment les tables imbriquées, je n'ai pas d'autre choix), xpath entre en jeu. Une méthode courante pour se simplifier la vie est d'installer l'extension xpath dans Firefox, cliquer avec le bouton droit pour obtenir directement. Je ne vais pas en parler ici, car je ne le recommande pas, l'utilisation de l'extension peut faire que le code soit envahi par de telles choses :
XPath (/html/body/div/div[3]/div[2]/div[4]/p[2])
En cas de nécessité, utilisez les caractéristiques de l'élément pour le localiser, par exemple le nom du bouton.
ou localiser un élément enfant à travers l'élément parent.
username =browser.find_element_by_xpath("//input[@name='username']") clear_button = browser.find_element_by_xpath("//form[@id='loginForm']/input[4]")
Voici le code, la méthode courante d'utilisation de By sur le web nécessite l'importation du paquet.
from selenium.webdriver.common.by import By
Ici, j'utilise une autre fonction, je ne sais pas quelle est la différence- -。
for i in range(100): elem=WebDriverWait(browser, 30).until( lambda x:x.find_element_by_xpath("//table[@class='aaa']"/td[1)) elem.click() time.sleep(20) print ("click",i)
Ensuite, il faut également mentionner la fonction wait, dans selenium2L'attente prolongée se divise en deux types, l'attente explicite et l'attente implicite.
Attente explicite
L'attente explicite signifie attendre explicitement l'apparition d'un élément ou la condition de cliquabilité d'un élément, s'il ne peut pas être trouvé, il continuera à attendre, sauf si aucun élément n'est trouvé dans le temps prévu, auquel cas il sortira de l'Exception.
element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "myDynamicElement")) )
Attente implicite
Attention, l'attente implicite consiste à indiquer que tous les éléments DOM doivent être trouvés lors de la recherche d'un élément, s'ils ne sont pas trouvés immédiatement, essayez pendant ce temps.
browser.implicitly_wait(10) # secondes
La différence réside en une gestion directe de l'objet d'expiration par soi-même, et en le laissant à la responsabilité du webdriver.
Bien sûr, vous pouvez aussi attendre passivement en utilisant la méthode de sommeil. N'oubliez pas d'importer le paquet time.
time.sleep(20)
Voici une simple démonstration de l'utilisation, il y a beaucoup de choses à améliorer, sans encapsuler les fonctions, sans utiliser la concurrence multithreadée pour exécuter plusieurs exemples. Des améliorations seront apportées à la demande.
Voici la totalité du contenu de cet article, j'espère qu'il vous aidera dans vos études, et j'espère que vous soutiendrez également le tutoriel à cri
Déclaration : Le contenu de cet article est tiré d'Internet, la propriété intellectuelle appartient aux auteurs respectifs, le contenu est contribué et téléchargé par les utilisateurs d'Internet, ce site n'possède pas de propriété, n'a pas été édité par l'homme, et n'assume pas la responsabilité des responsabilités juridiques associées. Si vous trouvez du contenu suspect de violation de droits d'auteur, vous êtes invités à envoyer un e-mail à : notice#oldtoolbag.com (au moment de l'envoi d'un e-mail, veuillez remplacer # par @ pour signaler un abus, et fournir des preuves pertinentes. Une fois confirmé, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.)