Automatisation Appium+python (10) - astuces de positionnement d'éléments pour vous aider à traverser les deux veines de Ren Du - Volume 1 (explication super détaillée)

1. Explication des méthodes de positionnement courantes

  Le positionnement d'objet est une étape très critique dans les tests automatisés, et on peut aussi dire qu'il s'agit de l'étape la plus critique.Après tout, si votre objet n'est pas positionné, vous ne pouvez pas le faire si vous le souhaitez. Par conséquent, frère Hong espère que la connaissance de ce chapitre sera plus pratique et pratique, pas seulement la connaissance des livres.Après tout, je ne peux qu'illustrer cela avec des exemples. Jetons un coup d'œil à certaines des méthodes de positionnement que nous utilisons couramment.

1.1 Positionnement de l'identifiant

  Que ce soit dans l'automatisation Web ou l'automatisation des applications, l'identifiant est unique. Certains amis peuvent avoir des doutes lorsqu'ils voient cela, car certaines informations indiquent qu'il est unique grâce au positionnement du nom. Pourquoi avez-vous un identifiant ici ? En fait, c'est in Il n'y avait pas de conflit auparavant, mais si vous utilisez une version plus récente d'appium, cela ne fonctionnera pas. Dans la nouvelle version, le positionnement du nom est supprimé, il n'y aura donc pas de positionnement de nom dans le futur positionnement. Habituellement, nous préférons Utiliser identifiant à localiser. Les amis qui viennent d'apprendre ici peuvent avoir des questions, parfois pourquoi votre application n'a pas d'identifiant, ou pourquoi elle est sur ce téléphone mais pas sur d'autres téléphones. 1. Le développement n'est pas ajouté. 2. La version Android est inférieure à 4.4.

Regardons juste l'image ci-dessous

 

L'identifiant de l'objet entouré en rouge sur le côté gauche de l'image ci-dessus peut être vu dans les propriétés à droite. Son identifiant est également entouré en rouge. Si nous devons entrer dans la zone de saisie "Veuillez entrer le compte Taobao" Information , nous n'avons qu'à opérer l'id à droite, regardons directement le code ci-dessous.

1 driver.find_element_by_id("com.taobao.taobao:id/aliuser_login_account_et").send_keys("潇潇说测试")

Grâce au code ci-dessus, nous pouvons entrer directement les informations de compte dans la zone de saisie des informations de compte Pékin Xiaoxiao a déclaré test. C'est peut-être un peu déroutant pour ceux qui n'ont aucune base. D'où vient ce pilote ? Le pilote a été initialisé lorsque nous le configurons pour démarrer. Il suffit d'appeler sa méthode find_element_by_id. Si votre ide a une fonction d'auto-complétion, vous rencontrerez un problème lorsque vous entrerez dans la méthode suivante, pourquoi y a-t-il un find_elements_by_id ? Cela sera expliqué plus tard, et les amis intéressés pourront y réfléchir.

1.2 positionnement du nom de classe

Dans le travail réel, le positionnement de className sera relativement moins utilisé. Lorsque vous regardez souvent la classe, vous constaterez que de nombreux noms de classe sont identiques et que vous n'avez aucun moyen de les localiser de manière unique. Regardons les deux images suivantes

Nous pouvons examiner de plus près le nom de classe dans les deux zones de saisie du compte Taobao et du mot de passe dans ces deux images. Si vous utilisez la méthode ci-dessous pour localiser dans ce cas, vous constaterez que vous ne pourrez jamais localiser la colonne de mot de passe ., Pourquoi est-ce? Parce que lors de la conception, s'il y a plusieurs éléments sur la page que vous recherchez, le système sélectionnera automatiquement le premier pour vous, vous ne pourrez donc jamais faire fonctionner ce dernier, alors comment résoudre de tels problèmes dans le travail réel ou Qu'en est-il de ce genre de problème ? Expliquera plus tard.

driver.find_element_by_class_name("android.widget.EditText").send_keys("潇潇说测试")

1.3 positionnement xpath

Le positionnement XPath est le plus courant et le plus efficace dans l'automatisation Web. L'utilisation du positionnement xpath évite le problème de ne pas trouver d'éléments et de provoquer des erreurs, mais l'utilisation du positionnement xpath dans l'application est une chose très faible. Pourquoi dites vous cela? Parce que d'après l'expérience des gens qui y sont allés, tant qu'ils utilisent xpath pour localiser des éléments, leur réaction sera plus lente. Le but de l'automatisation est d'améliorer l'efficacité, mais l'utilisation de xpath réduira l'efficacité, elle est donc très faible ici. Mais souvent, nous devons comprendre, expliquons-le brièvement ci-dessous. Tout d'abord, nous devons nous familiariser avec le positionnement xpath du Web.

1) Avant de parler du xpath du Web, veuillez d'abord installer le navigateur fireFox, puis installez les plug-ins fireBug et FirePath dans le navigateur. Comme indiqué ci-dessous:

Ces deux plug-ins sont essentiels lors de l'automatisation ou de l'apprentissage de xpath. Ici, nous allons parler directement de xpath. Regardons l'image ci-dessous pour comprendre

Encerclez la zone de saisie avec une ligne pointillée en rouge et regardons le positionnement qui nous est donné par xFirePath. Le xpath affiché dans le positionnement est ".//*[@id='kw']", qu'est-ce que cela signifie ? Expliquons étape par étape. 1. //* Sélectionnez tous les éléments du document. 2. @id='kw'] correspond au nœud dont l'attribut est id et la valeur est kw. Certains amis ici ne le comprendront peut-être pas très bien, disant qu'il suffit d'utiliser directement l'identifiant pour se positionner ici. En fait, c'est le cas, mais qu'en est-il lorsqu'il n'y a pas un tel attribut ? Regardons l'image ci-dessous

  Si le positionnement du nom n'est pas valide, lorsque vous voyez cette image, comment pouvez-vous la localiser si vous n'utilisez pas XPath ? Se sentir un peu fou. Des amis peuvent essayer d'utiliser xpath pour se localiser par eux-mêmes. Certaines personnes peuvent trouver que le positionnement dans xpath n'est pas très clair. Pourquoi ? .//*[@id='u1']/a[4] Dans ce xpath, nous n'avons pas la pensée aussi claire qu'avant, il a des relations plus hiérarchiques, dont nous parlerons plus tard. Dans ce xpath, la première étape 1, @id='u1' est la même qu'avant, et l'attribut correspondant est un nœud dont la valeur id est ul, puis placez-le en dessous. La deuxième étape 2, /a[4 ] signifie de Sélectionnez le quatrième un élément sous le nœud racine. Cette analyse étape par étape est-elle plus facile à comprendre ? Jetons un coup d'œil à certaines grammaires qui sont souvent utilisées dans le positionnement xpath, et pratiquons beaucoup.

C'est ce que nous utilisons souvent, et c'est la connaissance la plus basique. Seuls ceux-ci ne peuvent pas répondre à de nombreux besoins étranges, il y en a donc des plus difficiles. Regardons la liste ci-dessous

Les connaissances ci-dessus sont toutes dans http://www.w3school.com.cn/xpath/xpath_examples.asp, vous pouvez lire plus et pratiquer plus.

Regardons directement l'utilisation de xpath dans l'application

Dans les deux images ci-dessus, nous pouvons clairement voir que leur id et className sont les mêmes. Dans ce cas, nous ne pouvons utiliser xpath pour localiser sans positionnement hiérarchique. Tout d'abord, vous pouvez réfléchir à la façon de le faire selon l'apprentissage Web précédent .poste. Regardons directement le code

1 driver.find_element_by_xpath("//android.widget.TextView[@text='聚划算']").click()

Dans xpath, notre syntaxe est "//android.widget.TextView[@text='JavaScript']", qui est la même que notre xpath Web précédent, ce qui signifie trouver tous les nœuds dans lesquels le nœud est android.widget.TextView (ici Le nom de la classe est utilisé, et l'identifiant peut également être utilisé, et le système le recherchera à son tour) et sa valeur d'attribut de texte est JavaScript. Est-ce plus facile à comprendre ? Descendez et entraînez-vous davantage. Cette méthode de positionnement n'est pas recommandée et l'efficacité est très lente.

2. Positionnement hiérarchique

2.1 Qu'est-ce que le positionnement hiérarchique

  Nous avons mentionné le positionnement hiérarchique dans les chapitres précédents, mais nous ne savons tout simplement pas comment le faire. Dans de nombreuses automatisations, si elles ne reposent que sur un positionnement simple, il n'y a aucun moyen de terminer l'automatisation. Tout comme le positionnement xpath, certains éléments ont les mêmes identifiant, nom et nom de classe, et le positionnement xpath est inefficace. À l'heure actuelle, la plupart d'entre nous utilisera le ciblage hiérarchique.

2.2 Comment utiliser le positionnement hiérarchique dans le projet

Prenons un exemple simple pour comprendre le positionnement hiérarchique.

Sur l'image ci-dessus, nous pouvons voir qu'il existe de nombreux android.widget.FrameLayout sous le nœud dont l'id est com.taobao.taobao:id/rv_main_container

Sur l'image ci-dessous, nous pouvons voir que le nœud avec l'id android.widget.FrameLayout contient beaucoup d'android.widget.LinearLayout

À partir de cette image, nous pouvons facilement voir que si nous voulons localiser cet élément, nous ne pouvons pas le localiser. Dans ce cas, la plupart d'entre nous utilisent le positionnement hiérarchique et xpath. Ici, nous verrons comment utiliser le positionnement hiérarchique.

Tout d'abord, nous pouvons voir la différence dans la structure des trois images. Les éléments de la troisième image sont dans la deuxième image, et les éléments de la deuxième image sont dans la première image. Ici, nous appelons le premier Le nœud dont l'identifiant de l'image (com.taobao.taobao:id/rv_main_container) est android.widget.FrameLayout est le nœud parent du deuxième élément d'image, et le deuxième identifiant de l'image (android.widget.FrameLayout) est android.widget.FrameLayout Le nœud de le troisième élément d'image est le nœud parent du troisième élément d'image, le premier identifiant d'image (com.taobao.taobao:id/rv_main_container) est le nœud d'android.widget.LinearLayout est le nœud grand-parent du troisième élément d'image ; nous ne faisons que vous devez d'abord localiser le nœud grand-parent par identifiant, puis le localiser séquentiellement du nœud grand-parent au bas. Maintenant, vous pouvez vous entraîner et voir le même résultat que le mien ? Regardez le code :

1 element= driver.find_element_by_id("com.taobao.taobao:id/rv_main_container")
2 element1 = element.driver.find_elements_by_class_name("android.widget.FrameLayout")
3 element2 = element1[1].find_element_by_class_name("android.widget.LinearLayout")
4 element2.click()

Selon notre réflexion, notre code sera le résultat ci-dessus, mais si vous l'exécutez, vous constaterez qu'aucune erreur n'est signalée, mais vous ne cliquerez pas. Regardons l'image ci-dessous (pro-test, il cliquera sur le premier Tmall, c'est peut-être le premier par défaut)

Le nom de classe de tous les nœuds enfants sous le nœud grand-parent est "android.widget.FrameLayout", et le nom de classe de tous les nœuds enfants sous le nœud parent est "android.widget.LinearLayout". Dans ce cas, comment cliquer Qu'en est-il de l'opération ? Donc, dans ce cas, un nouveau problème de positionnement sera déclenché, qui est le positionnement de la Liste dont frère Hong parlera ensuite.

2.3 Code de référence

 1 # coding=utf-8
 2 # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
 3 
 4 # 2.注释:包括记录创建时间,创建人,项目名称。
 5 '''
 6 Created on 2019-7-01
 7 @author: 潇潇说测试
 8 Project:学习和使用定位元素
 9 '''
10 # 3.导入模块
11 from appium import webdriver
12 import time
13 desired_caps = {}
14 desired_caps['platformName'] = 'Android'   #android的apk还是IOS的ipa
15 desired_caps['platformVersion'] = '8.0'  #android系统的版本号
16 desired_caps['deviceName'] = '127.0.0.1:62001'    #手机设备名称,通过adb devices  查看
17 desired_caps['appPackage'] = 'com.taobao.taobao'  #apk的包名
18 desired_caps['appActivity'] = 'com.taobao.tao.welcome.Welcome'  #apk的launcherActivity
19 #desired_caps['unicodeKeyboard'] = True   #使用unicodeKeyboard的编码方式来发送字符串
20 #desired_caps['resetKeyboard'] = True   #将键盘给隐藏起来
21 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) #启动服务器地址,后面跟的是手机信息
22 # 休眠五秒等待页面加载完成
23 time.sleep(5)
24 
25 element= driver.find_element_by_id("com.taobao.taobao:id/rv_main_container")
26 element1 = element.find_elements_by_class_name("android.widget.FrameLayout")
27 element2 = element1[1].find_element_by_class_name("android.widget.LinearLayout")
28 element2.click()
29 
30 # driver.quit()

résumé

1. J'ai présenté le navigateur Firefox plus tôt. Ici, Brother Hong résumera comment Google Chrome utilise xpath pour localiser. Bien sûr, les maîtres et les maîtres peuvent l'ignorer, car vous pouvez directement écrire xpath pour localiser. En fait, regarder leur grammaire est également très simple.Vous pouvez également essayer l'écriture manuscrite à un stade ultérieur pour voir la différence avec les outils, qui peuvent vous aider à vous améliorer et à vous améliorer.

2. Adresse de téléchargement du plug-in xpath du navigateur Google https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl

3. Pour la méthode d'installation, utilisez le navigateur Google pour accéder directement à l'adresse ci-dessus, puis ajoutez-la.

 4. Découvrez comment l'utiliser et ses effets

(1) Google Chrome, F12, sinon, vous pouvez ouvrir "Outils de développement"

(2) Cliquez sur la "flèche" à gauche pour trouver l'élément à localiser

(3) Sélectionnez l'élément de la console, bouton droit de la souris, dans la copie, sélectionnez "Copier XPath"

(4) Contenu de la copie : (//*[@id="kw"])

5. Faites attention à la différence entre find_element et find_elements ! ! !


              [Ce qui suit est le diagramme de système d'architecture de connaissances d'apprentissage d'ingénieur de test logiciel le plus complet en 2023 que j'ai compilé]


1. De l'entrée à la maîtrise de la programmation Python

2. Combat réel du projet d'automatisation de l'interface

3. Combat réel du projet d'automatisation Web


4. Combat réel du projet d'automatisation des applications

5. CV des fabricants de premier rang


6. Tester et développer le système DevOps

7. Outils de test automatisés couramment utilisés


Huit, test de performance JMeter

9. Résumé (petite surprise à la fin)

la vie est longue alors ajoutez de l'huile. Chaque effort ne sera pas abandonné, tant que vous persévérez, il y aura des récompenses à la fin. Chérissez votre temps et poursuivez vos rêves. N'oubliez pas l'intention initiale, allez de l'avant. Votre avenir est entre vos mains !

La vie est courte, le temps est précieux, nous ne pouvons pas prédire ce qui se passera dans le futur, mais nous pouvons saisir le moment présent. Chérissez chaque jour et travaillez dur pour vous rendre plus fort et meilleur. Croyance ferme, poursuite persistante, le succès vous appartiendra finalement !

Ce n'est qu'en vous remettant constamment en question que vous pourrez constamment vous surpasser. Persistez dans la poursuite de vos rêves et avancez courageusement, et vous constaterez que le processus de lutte est si beau et si valable. Croyez en vous, vous pouvez le faire !

Méthode d'acquisition d'informations :
ce document et ces informations vidéo devraient constituer l'entrepôt de préparation le plus complet et le plus complet pour les amis qui souhaitent s'engager dans [des tests de logiciels]. Cet entrepôt a également accompagné des dizaines de milliers d'ingénieurs de test tout au long du voyage le plus difficile. L'espoir peut aider toi aussi! Tout ce qui précède peut être partagé, cliquez sur la petite carte ci-dessous pour entrer dans le groupe à recevoir.

Je suppose que tu aimes

Origine blog.csdn.net/NHB456789/article/details/131765036
conseillé
Classement