0

Ich benutze Java und Selenium, um einen Test zu schreiben. In meinem DOM habe ich zwei svg Tags. Einer von ihnen hat mehr als 2 innere path Tags. Ich brauche diese svg so erhalte ich verwendet:Wie benutze ich die count() - Funktion, um ein Element mit einer bestimmten Anzahl von inneren Tags zu erhalten

wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(
         "//*[local-name() = 'svg' and count(.//path)>'2']"))); 

oder

wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(
          "//*[local-name() = 'svg'] [count(.//path)>'2']"))); 

, aber es funktioniert nicht. Ich muss wissen, was damit nicht stimmt, also biete bitte andere Möglichkeiten an. Vielen Dank.

durch die Art und Weise sie gearbeitet:

//*[local-name() = 'svg' and count(.//*[local-name() = 'path' ])>'1'] 

oder

//*[local-name() = 'svg'][ count(.//*[local-name() = 'path' ])>'1'] 
+1

Veröffentlichen Sie relevanten Teil Ihres HTML. Niemand kann sagen, warum ein xpath funktioniert, aber nicht der andere, ohne das entsprechende HTML/XML zu kennen. – har07

+0

Nur ein freundlicher Tipp, den Sie vielleicht über diese Seite lesen möchten: [Der How-To-Ask Leitfaden] (https: // stackoverflow. com/help/how-to-ask), damit Sie immer sicher sein können, dass Ihre Fragen leicht zu beantworten und so klar wie möglich sind. Stellen Sie sicher, dass Sie alle Anstrengungen unternommen haben, die Sie unternommen haben, um das Problem zu beheben, das Sie haben, und was passiert ist, als Sie diese Korrekturen versuchten. Vergessen Sie auch nicht Ihren Showcode und eventuelle Fehlermeldungen! –

Antwort

0

Das Problem ist, dass Sie versuchen, .//path zu finden, die SVG-Element ist. Soweit ich weiß, können Sie dies nicht tun, da SVG-Elemente aus verschiedenen Namensräumen stammen. Wie Sie in Ihrer Frage erwähnt haben, können Sie es beheben, indem Sie [local-name() = 'path' ] verwenden. Eine Problemumgehung verwendet JSExecutor zum Ausführen der Methode document.evaluate(), sodass Sie den Namespace von SVG angeben können. Siehe Beispiel unter post.