2016-06-03 8 views
2

Wie finden Sie ein Element nach Text, wenn der übergebene Text eine Pause enthält?So finden Sie ein Element nach mehrzeiligem Text

<div> 
"Hello" 
<br> 
"World" 
</div> 

Die folgenden Werke:

text = 'Hello' 
driver.find_element_by_xpath("//div[text()[contains(.,'%s')]]"%text) 

Dies schlägt fehl, wenn die Variable text'Hello World'

ist Gibt es eine Möglichkeit, den Zeilenumbruch zu ignorieren?

+0

Sie könnten versuchen, alle '
' s aus Ihrem HTML zu entfernen, die Sie analysieren –

+0

Ich habe die Antwort bearbeitet, bitte lesen Sie es, es funktioniert für mich – user565447

Antwort

0

Versuchen Sie, Normalize-Space zu verwenden.

Dies funktioniert für mich:

ich ahve den Kolben Webserver laufen:

from flask import Flask 
app = Flask(__name__) 

@app.route("/") 
def hello(): 
    return """<div> 
    "Hello" 
    <br> 
    "World" 
    </div>""" 

if __name__ == "__main__": 
    app.run() 

Dann versuche ich, den Text zu finden:

from selenium import webdriver 

text = 'Hello World' 
driver = webdriver.Chrome() 
driver.get("http://localhost:5000") 
temp = driver.find_element_by_xpath("//div[normalize-space(//text() = '{0}')]".format(text)) 
print temp.text 

Er druckt mir die Zeichenfolge.

Sie sollten nicht diesen hässlichen Weg verwenden, um die Zeichenfolge zu formatieren, es ist die alte Art und Weise. Verwenden Sie die Format Funktion. Es ist klarer, was Sie meinen, wenn Sie es schreiben

+0

Vielen Dank! Ich habe es versucht, aber es scheint nicht zu funktionieren. Die Definition, die ich für normalize-space gefunden habe, lautet wie folgt: "function gibt die Argument-Zeichenkette mit Whitespace normalisiert zurück, indem sie führende und nachfolgende Whitespace entfernt und Sequenzen von Leerzeichen durch ein Leerzeichen ersetzt." Soll diese Funktion den Zeilenumbruch durch ein einzelnes Leerzeichen ersetzen? – miniluv

Verwandte Themen