Comment trouver des éléments ExtJS avec un identifiant dynamic

Je travaille avec Selenium et j’ai besoin d’obtenir l’ID d’un contrôle, mais l’ID est dynamic et je ne peux pas l’obtenir.

  

Le numéro 1122 est dynamic et d’autres boutons ont le même button-###+btnWrap début button-###+btnWrap .

Je répondais à des questions du genre de nombreuses fois, vous voudrez peut-être jeter un coup d’œil.

Les pages ExtJS sont difficiles à tester, notamment pour trouver des éléments.

Voici quelques conseils utiles:

  • N’utilisez jamais d’identifiants générés dynamicment. comme (:id, 'button-1122-btnEl')
  • N’utilisez jamais XPath absolu / sans signification, comme //div[4]/div[3]/div[4]/div/div/div/em/button

  • Tirez parti des identifiants partiels et des noms de classe générés automatiquement. (Vous devez donc montrer plus de code HTML dans votre exemple, car je peux faire des suggestions.)

    Par exemple, cet exemple de grid ExtJS: (:css, '.x-grid-view .x-grid-table') serait pratique. S’il existe plusieurs grids, essayez de les indexer ou de localiser l’ancêtre identifiable, comme (:css, '#something-meaningful .x-grid-view .x-grid-table') .

  • Profitez du texte du bouton.

    Par exemple, cet exemple ExtJS: vous pouvez utiliser XPath .//span[contains(@class, 'x-btn-inner') and text()='Send'] . Cependant, cette méthode ne convient pas aux applications CSS Selector ou multilingues.

  • La meilleure façon de tester est de créer des noms de classe significatifs dans le code source. Si vous n’avez pas access au code source, adressez-vous à votre responsable. Utiliser Selenium contre une application ExtJS devrait être un travail de développeur. ExtJS fournit cls et tdCls pour les noms de classe personnalisés. Vous pouvez donc append cls:'testing-btn-foo' dans votre code source, et Selenium peut l’obtenir par (:css, '.x-panel .testing-btn-foo') .

Autres réponses que j’ai apscopes sur ce sujet:

  • Comment trouver des sélecteurs uniques pour les éléments sur les pages avec ExtJS à utiliser avec Selenium?
  • Comment cliquer sur des éléments dans ExtJS avec Selenium?
  • Utiliser les noms de classe dans Watir
  • comment cliquer sur les cases à cocher dans une fenêtre pop-up qui n’a pas de nom, étiquette

Remarque: la réponse de sircapsalot ne fonctionne pas pour ExtJS, car la plupart des boutons ont le sélecteur CSS em[id^='button-'][id$='-btnWrap'] , (mais vous ne pouvez pas le blâmer, car em[id^='button-'][id$='-btnWrap'] ExtJS spécifique, certaines personnes peuvent ne pas être familier avec).

Simple avec les sélecteurs CSS.

Votre sélecteur serait,

 em[id^='button-'][id$='-btnWrap'] 

Ou si vous vouliez cliquer sur le bouton là-bas –

 em[id^='button-'][id$='-btnWrap'] > button