2015-08-27 12 views
5

Sto provando ad avere il selenio trovare un elemento in base a una stringa che può essere contenuta nel testo o in qualsiasi attributo, e mi chiedo se c'è qualche carattere jolly che posso implementare per catturare tutto questo senza dover utilizzare la logica OR multi-condizione. Quello che sto usando in questo momento che funziona è ...Selenio Trova elemento basato su stringa nel testo o nell'attributo

driver.findElement(By.xpath("//*[contains(@title,'foobar') or contains(.,'foobar')]")); 

E volevo sapere se c'è un modo per utilizzare un carattere jolly anziché l'attributo specifico (@title) che incapsula anche il testo elemento come il 2 ° fa parte della condizione OR.

+0

Io non la penso così, ma qualcosa che potrebbe aiutare ad arrivare ad una risposta più definitiva è [qui] (http://codebeautify.org/ xpath-Tester). –

+0

Esiste almeno un modo per assegnare un carattere jolly solo alla parte specifica dell'attributo (come trasformare @title in qualsiasi attributo) ma escludere il testo()? – user2150250

+0

Puoi darci un'idea del perché vuoi farlo? Come stai usando questo? – JeffC

risposta

9

Questo vi darà tutti gli elementi che contiene testo foobar

driver.findElement(By.xpath("//*[text()[contains(.,'foobar')]]")); 

Se volete corrispondenza esatta,

driver.findElement(By.xpath("//*[text() = 'foobar']")); 

Oppure è possibile eseguire JavaScript utilizzando jQuery in selenio

Ciò restituirà tutto elementi web contenenti il ​​testo dal genitore all'ultimo figlio, quindi sto usando il selettore jquery :last per ottenere il più interno nodo che contiene questo testo, ma questo potrebbe non essere sempre accurato, se si hanno più nodi che contengono lo stesso testo.

(WebElement)((JavascriptExecutor)driver).executeScript("return $(\":contains('foobar'):last\").get(0);"); 

Se volete corrispondenza esatta per quanto sopra, è necessario eseguire un filtro sui risultati,

(WebElement)((JavascriptExecutor)driver).executeScript("return $(\":contains('foobar')\").filter(function() {" + 
    "return $(this).text().trim() === 'foobar'}).get(0);"); 

jQuery restituisce un array di elementi, se si dispone di un solo elemento web, sulla pagina con quel particolare testo otterrai una matrice di un elemento. Sto facendo .get(0) per ottenere quel primo elemento dell'array e lanciarlo su un WebElement

Spero che questo aiuti.

+0

Non sembra che uno dei primi due copra il caso in cui un attributo come @title contiene la stringa. – user2150250

+0

@ user2150250 quando dici '@ titolo', intendi il titolo della pagina giusto? Il tag '' all'interno '<head>'. Ho testato xpath per questa pagina, '// * [text() = 'java - Selenium Trova elemento basato su stringa in testo o attributo - Stack Overflow']' e ha dato il webelement 'titolo'. Non sono sicuro che se capisco bene, le ultime 2 righe della tua domanda sono un po 'oscure per me. – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/1392498/">LINGS</a></span> <span></span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">In realtà è solo l'attributo 'title' di un WebElement, in questo caso un elemento' button'. Non è il titolo della pagina. – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/2150250/">user2150250</a></span> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1038284119" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">0<i class="fa fa-thumbs-up"></i></span> </div> <div class="post-offset"> <div class="answer fmt"> <p>Ciò restituirà l'elemento con testo <code class="prettyprint-override">foobar</code></p> <pre><code class="prettyprint-override">driver.findElement(By.xpath("//*[text()='foobar']")) </code></pre> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/32271968">fonte</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2015-08-28 13:15:10</span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> </div> </article> </div> <div class="clearfix"> </div> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1575177025"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img.uwenku.com/uwenku/script/side.js?t=1644592048671"></script> <script type="text/javascript" src="http://img.uwenku.com/uwenku/plugin/highlight/highlight.pack.js"></script> <link href="http://img.uwenku.com/uwenku/plugin/highlight/styles/docco.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript"> $('pre').each(function(i, e) { hljs.highlightBlock(e, "<span class='indent'> </span>", false) }); </script> <div class="col-lg-3 col-md-4 col-sm-5"> <div id="rightTop"> <div class="row"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="5415218910" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> Ultima domanda </div> <div class="m-b-sm m-t-sm clearfix"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://it.uwenku.com/question/p-vfnomsij-r.html" target="_blank" title="dispatchEvent() con una funzione come parametro, esegue la funzione, invece di passarlo"> dispatchEvent() con una funzione come parametro, esegue la funzione, invece di passarlo </a> </li> <li class="side_article_list_item"> 2. <a href="http://it.uwenku.com/question/p-vwvexizr-by.html" target="_blank" title="Come rendere estensione per più classi Swift"> Come rendere estensione per più classi Swift </a> </li> <li class="side_article_list_item"> 3. <a href="http://it.uwenku.com/question/p-ubglwiii-bb.html" target="_blank" title="animazione angular2 con stili variabili"> animazione angular2 con stili variabili </a> </li> <li class="side_article_list_item"> 4. <a href="http://it.uwenku.com/question/p-mrbwcepr-bk.html" target="_blank" title="com.android.support:design:24.1.0 non veniva visualizzato correttamente nella barra di navigazione"> com.android.support:design:24.1.0 non veniva visualizzato correttamente nella barra di navigazione </a> </li> <li class="side_article_list_item"> 5. <a href="http://it.uwenku.com/question/p-wiiqfoli-d.html" target="_blank" title="Qual è la differenza tra Docker per Windows e Docker su Windows?"> Qual è la differenza tra Docker per Windows e Docker su Windows? </a> </li> <li class="side_article_list_item"> 6. <a href="http://it.uwenku.com/question/p-ukerzrng-bx.html" target="_blank" title="Aggiornamento Google Play Services da 8.4.0 a 9.2.1 causa errore di sincronizzazione Gradle"> Aggiornamento Google Play Services da 8.4.0 a 9.2.1 causa errore di sincronizzazione Gradle </a> </li> <li class="side_article_list_item"> 7. <a href="http://it.uwenku.com/question/p-chksvqhh-bq.html" target="_blank" title="Dov'è la chiave di crittografia memorizzata in Jenkins?"> Dov'è la chiave di crittografia memorizzata in Jenkins? </a> </li> <li class="side_article_list_item"> 8. <a href="http://it.uwenku.com/question/p-vbyhofzo-bh.html" target="_blank" title="L'API DocuSign supporta google analytics?"> L'API DocuSign supporta google analytics? </a> </li> <li class="side_article_list_item"> 9. <a href="http://it.uwenku.com/question/p-oxwxqxzp-bt.html" target="_blank" title="R: set.seed() i risultati non corrispondono se il pacchetto caret è caricato"> R: set.seed() i risultati non corrispondono se il pacchetto caret è caricato </a> </li> <li class="side_article_list_item"> 10. <a href="http://it.uwenku.com/question/p-htoulamv-y.html" target="_blank" title="Accedere alle informazioni di percorso successivo all'interno canDeactivate guardia nel nuovo router angular2"> Accedere alle informazioni di percorso successivo all'interno canDeactivate guardia nel nuovo router angular2 </a> </li> </ul> </div> </div> </div> <p class="article-nav-bar"></p> <div class="row sidebar article-nav"> <div class="row box_white visible-sm visible-md visible-lg margin-zero"> <div class="top"> <h3 class="title"><i class="glyphicon glyphicon-th-list"></i> Problemi correlati</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item">Nessun problema correlato^_^</li> </ul> </div> </div> </div> </div> </div> </div> </div><!-- wrap end--> <!-- footer --> <footer id="footer"> <div class="bg-simple lt"> <div class="container"> <div class="row padder-v m-t"> <div class="col-xs-8"> <ul class="list-inline"> <li><a href="http://it.uwenku.com/contact">Contattaci</a></li> <li>© 2020 IT.UWENKU.COM</li> <li><a target="_blank" href="https://beian.miit.gov.cn/">沪ICP备13005482号-4</a></li> <li><script type="text/javascript" src="https://v1.cnzz.com/z_stat.php?id=1280101193&web_id=1280101193"></script></li> <li><a href="http://www.uwenku.com/" target="_blank" title="优文库">简体中文</a></li> <li><a href="http://hk.uwenku.com/" target="_blank" title="優文庫">繁體中文</a></li> <li><a href="http://ru.uwenku.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.uwenku.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.uwenku.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.uwenku.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.uwenku.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.uwenku.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.uwenku.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.uwenku.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.uwenku.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.uwenku.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.uwenku.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f78a970f17b19a79fc477a3378096f29"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>