0

enter image description here Je reçois ci-dessous l'erreur lors de l'exécution ci-dessous commande capybara, La chose intéressante est la même XPath ne donne aucune erreur dans je m'attends à ce que XPath soit présent. Mais quand j'essaie d'effectuer un clic sur ce XPath, il est en dessous de l'erreur.élément non visible Selenium capybara

-------------- Code ----------------

Puis (/^je clique sur « ([^ "] )" sur l'arbre de gauche enfant de "([^"]) "$ /) do | enfant, parent |

dans (: xpath, ".//div/span[@class='folder-nav-tree-fileroom 'et text() =' DND-IndexTwistyExpClps '] /../../../ ../ .. ", attendez: 5) faire

find(:xpath, ".//span[contains(text(),  '1 IndexTwistyLevel1')]/../../../span[@class='ui-tree-toggler fa fa-fw fa-caret-right']", wait:5).click 

fin

fin

Error : Capybara::ElementNotFound: Unable to find visible xpath "//div[.//span[contains(text(),  '1 IndexTwistyLevel1')]]/span[@class='ui-tree-toggler fa fa-fw fa-caret-right']" 

Répondre

1

Votre code a un certain nombre de questions, qui indiquent qu'il ne peut pas réellement Travaillez comme vous le prétendez. Si vous corrigez le code et fournissez le fragment HTML auquel il doit correspondre, nous pouvons réduire le problème, mais pour l'instant, les erreurs sont les suivantes:

Premièrement, vous avez et/ou vos expressions XPath (ne peuvent pas avoir inside a string surrounded by s il est donc évident que vous ne l'avez pas copier/coller votre code réel)

en second lieu, ::after n'est pas XPath valide - ::after éléments pseudo sont purement CSS et ne peuvent être accessibles à partir XPath , donc en incluant que dans votre sélecteur ne va pas donner les résultats attendus. Cela devrait entraîner une erreur de sélection non valide soulevée par Chrome.

En troisième lieu, de ne pas commencer vos sélecteurs avec . vous vaincre complètement le bloc de cadrage within - voir https://github.com/teamcapybara/capybara#beware-the-xpath--trap

Enfin, en utilisant visible: false sur un élément que vous voulez cliquer n'a pas de sens, puisque vous ne pouvez pas cliquer sur un élément qui n'est pas affiché sur la page.

Malheureusement, il est difficile de dire lequel de ceux-ci peut causer votre problème réel (le cas échéant) puisque le code que vous avez fourni n'est pas valide.

+0

Hey Thomas Walpole, Merci pour la réponse rapide: ci-dessous est le code de mise à jour .dans les (: XPath, « // div/span [@ 'dossier-nav-tree-Fileroom' = classe et text() = 'TEXT'] /../../../../ .. ") do si page.all (: xpath," // div [.// span [contient (texte (), '1 IndexTwistyLevel1')]]/span [@ class = 'ui-arbre-toggler fa-faw fa-caret-droit'] "). Count == 1 met" j'ai eu le match " fin find (: xpath, "// div [.// span [contains (text(), '1 IndexTwistyLevel1')]]/span [@ class = 'ui-tree-toggler fa-fw fa-caret-right'] ") fin – asingh

+0

@asingh Please il suffit d'éditer/corriger votre question pour que le code soit lisible - et avec le code que vous avez mis dans votre commentaire, il est inutile d'avoir un 'within' puisque vous l'annulez complètement avec vos expressions xpath - le troisième point de mon répondre –

+0

Hey Thomas, comme le point 3, j'ai mis à jour le code, couru il a obtenu l'élément d'erreur non visible, j'ai mis à jour la question et le code.Plz jeter un oeil, et encore merci beaucoup pour votre temps – asingh

0
within(:xpath, config['documents_obj']['FRChildTreeXpath'].sub('TEXT', parent), wait:5) do 
elem = find(:xpath, config['documents_obj']['childTwistyXpath'].sub('TEXT', child), visible:false, wait:5).native 
page.driver.browser.action.click(elem).perform 

Pour éviter l'erreur qui IWA gettign ce que je l'ai fait tout simplement, est je constructeur d'action capybara, Prenez l'élément natif puis effectuer l'action.

Cela a fonctionné parfaitement dans mon cas.

Référence: https://seleniumhq.github.io/selenium/docs/api/rb/Selenium/WebDriver/ActionBuilder.html