0
votes

Comment sélectionner un élément (LI) dans une liste (UL) via selenium webdiver et c # - délai d'attente lors de la localisation

ne semble pas sembler sélectionner un élément de liste

  • code> à partir d'une liste non formée
      code>, à l'aide de webdiver. Un délai d'attente est reçu lors de la localisation.

      html: p>

      p>

      IList <IWebElement> dropDownMenues = driver.FindElements(By.ClassName("dropdown-menu")); //Populates all drop down menues
      IList<IWebElement> selectedGender = dropDownMenues[1].FindElements(By.TagName("li")); //Populate drop down items
      //dropDownMenues[1].Click(); - This code doens't expand the drop down menu
      driver.FindElement(By.XPath("/html/body/div[3]/div/div[6]/div/div/div/div[2]/div/div/form/div/div/div[2]/div/div[1]/button")).Click(); //This code opens the drop down
      selectedGender[1].Click(); //Here's where I get the timeout
      

  • 0 commentaires

    3 Réponses :


    0
    votes

    Pour cliquer sur l'un des éléments

  • code> dans le
      code> car les éléments sont angular éléments que vous devez induire webDriverwait em> pour que l'élément souhaité soit cliquable em> et pour cliquer sur l'option avec du texte comme Homme strong> Vous pouvez utiliser la solution suivante:
      new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//button[@class='btn btn-lg form-control ng-pristine ng-valid ng-binding ng-isolate-scope ng-touched' and @name='genderButton']"))).Click();
      new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//button[@class='btn btn-lg form-control ng-pristine ng-valid ng-binding ng-isolate-scope ng-touched' and @name='genderButton']/ul//li[contains(@data-ng-click, 'gender') and text()='Male']"))).Click();
      

  • 6 commentaires

    Merci Debanjanb, mais je reçois toujours un délai d'attente lorsque vous essayez de cliquer sur l'élément

  • ... c'est inaccessible et je ne peux pas sembler contourner


    En outre, c'est une application de page unique angularjs. Les éléments de boîte de déroulement sont cachés jusqu'à ce que vous cliquiez sur ... la page n'est pas rafraîchie bien sûr.


    @Eyal Checkout ma réponse mise à jour et laissez-moi savoir le statut.


    Merci @Debanjanb, mais je reçois toujours un délai d'attente. - Le 1er clic - je devais changer le XPath vers la boîte XPath de Tejas Jagtap sur Tejas Jagtap, est élargi. - Le 2e clic obtient toujours un délai d'attente ... avec votre XPath fourni, ou Tejas Jagtap's One. Ce délai d'attente est un délai d'attente de 60 secondes - ce qui signifie que la recherche n'a pas conduit correctement ...?


    @Eyal en fait, il y a un problème avec le HTML que vous avez fourni. La balise n'a jamais été fermée lorsque le parent

    a été fermé. Pouvez-vous crucher si le HTML est exact tel quel?


    @ Debanjanb - Vous avez très raison! J'ai manqué de l'expansion (travailler avec Firebug). Mis à jour ci-dessus



  • 0
    votes

    Ceci pourrait également être fait en utilisant deux clics. Faire 1er cliquez sur xpath: xxx

    puis cliquez sur xpath: xxx

    PS: utilisez le webDriver Attendez-vous de manière à donner du temps pour l'élément à charger.


    4 commentaires

    Merci Tejas, mais tandis que le 1er clic fonctionne tout à bien (étend la sélection) - je reçois un délai d'attente d'essayer de cliquer sur LI [2] ... c'est inaccessible pour une raison quelconque, je ne peux pas comprendre comment contourner


    En outre, c'est une application de page unique angularjs. Les éléments de boîte de déroulement sont cachés jusqu'à ce que vous cliquiez sur ... la page n'est pas rafraîchie bien sûr.


    J'espère que vous avez suffisamment utilisé d'attendre après avoir cliqué sur le 1st Dropdown Click.


    En outre, une fois, essayez avec ce xPath pour le 2e clic: // li [contient (texte (), 'mâle')]



    0
    votes

    Comme il s'avère, la solution était très simple et non ce qui se distingue ... Tout ce que je devais faire, c'est Mettre à jour mon chromedriver.exe à la dernière version (il était de 8 mois) - et j'ai pu trouver tous les éléments qui ont provoqué un délai d'attente avant.

    J'ai mis à jour certains forfaits de sélénium dans mon studio Visual Il n'y a pas si probablement de cette situation, mais n'a pas rappelé que le chromeur doit être mis à jour en conséquence.


    0 commentaires