3
votes

org.openqa.selenium.ElementNotVisibleException: élément non interactif en essayant de cliquer sur un élément via le sélénium

J'essaie de cliquer sur le bouton Ajouter nouveau . Mais il lance une erreur, disant org.openqa.selenium.ElementNotVisibleException: élément non interactif

/html/body/div[@id='app']/div[@class='_loading-overlay']/main/div[@class='container-fluid search_table_container']/div[@class='col-md-12 test_tab_wrapper']/div[@class='test_subtab_container']/div[@id='left-tabs-example']/div[@class='col-sm-12'][2]/div[@class='tab-content']/div[@id='left-tabs-example-pane-resources']/div/div[@class='workflowtab_box']/div[@class='row vertical_tab_panel_container']/div[@id='left-tabs-example']/div[@class='col-sm-9']/div[@class='tab-content']/div[@id='left-tabs-example-pane-metastore']/div[@class='title col-sm-12']/button[@class='custom-btn create-new-button']

J'ai essayé de suivre:

driver.findElement(By.cssSelector(".custom-btn.create-new-button")).click();

Xpath pour le bouton Ajouter un nouveau généré à l'aide de l'extension Chrome est:

<div id="left-tabs-example-pane-metastore" aria-labelledby="left-tabs-example-tab-metastore" role="tabpanel" aria-hidden="false" class="fade tab-pane active in">
   <div class="title col-sm-12"><button class="custom-btn create-new-button" style="float: right;">Add New</button></div>
   <div class="test_table custom-test_table">
      <div class="divTable">
         <div class="divTableHeading">
            <div class="row" style="margin: 0px 3px; border-bottom: 1px solid rgb(221, 221, 221); padding: 15px;">
               <div class="col-sm-3">Name</div>
               <div class="col-sm-3">Created by</div>
               <div class="col-sm-3">Created on</div>
               <div class="col-sm-2">Status</div>
               <div class="col-sm-1">Actions</div>
            </div>
         </div>
         <div class="divTableBody">
            <div class="row" style="margin: 0px 3px; border-bottom: 1px solid rgb(221, 221, 221); padding: 15px;">
               <div class="col-md-3" title="beta-stage-metastore" style="text-overflow: ellipsis; display: inline-block; white-space: nowrap; overflow: hidden;"><a href="#/projects/p-b48010e4-873a-4c4b-9c71-10235dfc8cf0/resources/rds-3e5e6b92-0d59-4485-bf7a-e6965eb7f9f8/details">beta-stage-metastore</a></div>
               <div class="col-md-3">betaorg-admin</div>
               <div class="col-md-3">9th February at 13:17 hrs</div>
               <div class="col-md-2" style="overflow-wrap: break-word;">STOPPED</div>
               <div class="col-sm-1">
                  <span class="dropdown custom_dropdown option-custom_dropdown" style="border-right: none;">
                     <a href="" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><img src="images/more.png"></a>
                     <ul class="dropdown-menu">
                        <li><a>Start</a></li>
                     </ul>
                  </span>
               </div>
            </div>
         </div>
      </div>
   </div>
</div>


2 commentaires

Pouvez-vous vérifier si le bouton est dans une iframe?


J'ai répondu, veuillez vérifier et faites-moi savoir si cela aide.


4 Réponses :


0
votes

Veuillez patienter un peu avant que le pilote Web ne voie l'élément. Veuillez essayer ceci.

    WebDriverWait wait = new WebDriverWait(driver, 40);          
 wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div/button[@class='custom-btn create-new-button']"))).click();


7 commentaires

ne fonctionne pas est dit org.openqa.selenium.TimeoutException: La condition attendue a échoué: attente de la visibilité de l'élément localisé par By.xpath: // button [@ class = 'custom-btn create-new-button'] (essayé pendant 40 secondes (s)


Étrange.Pourquoi cela ne fonctionne pas sur votre machine.Il fonctionne dans ma machine.J'ai testé puis transmis.


Je ne sais pas pourquoi. ce bouton comme vous le voyez en html est à l'intérieur de deux balises div


L'erreur indique timeoutexception


n'a pas fonctionné. J'ai mis à jour la question. veuillez vérifier la dernière fois


Tout le reste fonctionne correctement sur cette page, le bouton Ajouter un nouveau ne fonctionne pas


J'ai essayé de suivre et cela a fonctionné: // div [@ class = 'tab-content'] / div [@ id = 'left-tabs-example-pane-‌ metastore'] / div [@ cla‌ ss = 'title col-sm-12 '] / bouton [@ class =' ​​custom-btn create-new-button ']



0
votes

Essayez le xpath: driver.findElement (By.xpath ("// button [text () = 'Add New']"));

Veuillez vérifier si l'élément est dans une iframe ou non. Si oui, alors vous devez d'abord passer à l'iframe puis cliquer sur l'élément, pour passer à l'iframe, vous pouvez vous référer à: Comment gérer l'iframe dans Selenium WebDriver en utilisant java

Si ce n'est pas dans une iframe, vous pouvez directement cliquer sur l'élément en utilisant le xpath mentionné ci-dessus.


12 commentaires

Ok, alors s'il vous plaît essayez le xpath que j'ai mentionné, cela devrait vous aider


n'a pas fonctionné j'ai essayé: driver.findElement (By.xpath ("// bouton [contient (@ class = 'custo‌ m-btn create-new-button')]")); Il dit org.openqa.selenium.InvalidSelectorException: sélecteur invalide: Impossible de localiser un élément avec l'expression xpath // bouton [contient (@ class = 'custom-btn create-new-button')]


C'est le mauvais xpath que vous avez mentionné ici, avec contient, xpath n'inclut pas =, veuillez donc essayer celui que j'ai mentionné dans la réponse et laissez-moi savoir si cela fonctionne.


J'ai essayé ceci: driver.findElement (By.xpath ("// button [contains (@ class, 'custo‌ m-btn create-new-button')]")). click (); Il dit, org.openqa.selenium.ElementNotVisibleException: élément non interactif


Ok, j'ai édité le xpath dans la réponse, veuillez essayer celui-là aussi, cela pourrait vous aider :)


n'a pas fonctionné. J'ai une question de mise à jour, veuillez vérifier la dernière fois


J'ai mis à jour la réponse maintenant, essayez le xpath mis à jour et faites-moi savoir si cela fonctionne.


Cela a fonctionné lorsque j'ai passé le Xpath comme celui que j'ai mentionné dans la question


Mais le xpath que vous avez mentionné est absolu et il peut ne pas fonctionner s'il y a un changement dans la structure div. Alors essayez le xpath que j'ai mentionné dans la réponse car je l'ai modifié maintenant et faites-moi savoir si cela aide.


Non, il a également échoué


Tout le reste fonctionne correctement sur cette page, le bouton Ajouter un nouveau ne fonctionne pas


J'ai essayé de suivre et cela a fonctionné: // div [@ class = 'tab-content'] / div [@ id = 'left-tabs-example-pane-‌ metastore'] / div [@ cla‌ ss = 'title col-sm-12 '] / bouton [@ class =' ​​custom-btn create-new-button ']



0
votes

Pour cliquer sur l'élément contenant le texte Ajouter nouveau , vous pouvez utiliser l'une des solutions suivantes:

  • cssSelector :

    driver.findElement(By.xpath("//div[@class='tab-content']/div[@id='left-tabs-example-pane-metastore']/div[contains(@class, 'title')]/button[@class='custom-btn.create-new-button' and text()='Add New']")).click();
    
  • xpath :

    driver.findElement(By.cssSelector("div.tab-content>div#left-tabs-example-pane-metastore>div.title>button.custom-btn create-new-button")).click();
    


7 commentaires

pour cssSelector il a dit: org.openqa.selenium.NoSuchElementException: aucun élément de ce type: impossible de localiser l'élément pour xpath, il a dit: org.openqa.selenium.NoSuchElementException: aucun élément de ce type: impossible de localiser l'élément:


Tout le reste fonctionne correctement sur cette page, le bouton Ajouter un nouveau ne fonctionne pas


J'ai essayé de suivre et cela a fonctionné: // div [@ class = 'tab-content'] / div [@ id = 'left-tabs-example-pane-‌ metastore'] / div [@ cla‌ ss = 'title col-sm-12 '] / bouton [@ class =' ​​custom-btn create-new-button ']


Donne-moi une minute, laisse-moi vérifier la différence


@ user10144071 Le nœud parent // div [@ class = 'tab-content'] ne fait toujours pas partie du html que vous nous avez fourni :) J'ai mis à jour ma réponse selon vos commentaires. Faites-moi savoir le statut s'il vous plaît.


Maintenant, cela fonctionnait mal, je n'ai pas partagé toutes les balises. Mais pourquoi j'ai dû fournir dans ce cas dans le cas du bouton Ajouter un nouveau. Sinon où ça marche bien


@ user10144071 La raison est simple, nos Stratégies de localisation n'ont pas n'identifie pas uniquement l'élément souhaité.



1
votes

Fondamentalement, il y a quatre raisons pour lesquelles un élément n'est pas interactif.

1) Timing - le temps nécessaire au chargement des éléments. Pour cela, vous devez vérifier comment utiliser une attente implicite

2) Vérifiez si l'élément est dans un cadre. Pour cela, passez au cadre.

3) Localisateur incorrect

4) Mauvaise implémentation de la réactivité. Cela découle toujours du n ° 3). Certains sites Web n'ont qu'un seul code activé pour les versions mobile et Web. Ainsi, l'élément aura plus d'une instance lorsque vous vérifiez le xxxxx.size. Vous devrez rechercher dans la liste celui dont l'affichage! = Aucun. Ensuite, vous pouvez ajouter la position de l'élément à votre xpath ou à tout autre localisateur que vous utilisez. Par exemple. xxxx / yyyyy / zzzz [3] si la position est 4 dans la liste.

Utilisez ce code pour java, Hypothèses a) le type de localisateur est id b) le nom de la liste est nameOfYourElements

List nameOfYourElements = wd.findElements (By.id ("nameOfYourID")); System.out.println (nameOfYourElements.size ());


0 commentaires