2010-06-12 10 views
7

Ich benutze Xpath in Selenium RC über die Python API.Wie verwende ich Unicode in einer X-Pfad-Zeichenfolge? (UnicodeEncodeError)

Ich brauche ein ein Element klicken, der Text ist ist „Submit»“

Hier ist der Fehler, ich bin immer:

In [18]: sel.click(u"xpath=//a[text()='Submit \xbb')]") 
--------------------------------------------------------------------------- 
UnicodeDecodeError      Traceback (most recent call last) 

/Users/me/<ipython console> in <module>() 

/Users/me/selenium.py in click(self, locator) 
    282   'locator' is an element locator 
    283   """ 
--> 284   self.do_command("click", [locator,]) 
    285 
    286 

/Users/me/selenium.py in do_command(self, verb, args) 
    201   body = u'cmd=' + urllib.quote_plus(unicode(verb).encode('utf-8')) 
    202   for i in range(len(args)): 
--> 203    body += '&' + unicode(i+1) + '=' + urllib.quote_plus(unicode(args[i]).encode('utf-8')) 
    204   if (None != self.sessionId): 
    205    body += "&sessionId=" + unicode(self.sessionId) 

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 28: ordinal not in range(128) 

Antwort

3
sel.click(u"xpath=//a[text()='Submit \xbb')]") 

Es ist möglich, XPath-Ausdrücke zu schreiben, die keine Unicode-Zeichen enthalten.

Zum Beispiel:

//a[text()='Submit &#xBB;')]

1

Ich glaube, Sie müssen nur

ändern
sel.click(u"xpath=//a[text()='Submit \xbb')]") 

zu

sel.click(u"xpath=//a[text()='Submit \xbb')]".encode('utf8')) 

Das liegt daran, dass der Fehler angibt, dass Selenium versucht, das Unicode-Objekt in eine Byte-Zeichenfolge zu codieren (mit dem Standard-Codec für Python, also 'ascii'). Indem Sie es zunächst explizit mit dem vermutlich richtigen Codec ('utf8', der Standardcodierung in XML) selbst verschlüsseln, sollten Sie dieses Problem daher vermeiden.

+1

Ich habe versucht, dass das Hinzufügen - es immer noch eine UnicodeDecodeError wirft. Irgendwelche anderen Ideen? –

0

Erwartet sel_click() Unicode-Strings oder UTF-8 (Byte) -Strings? Der gefürchtete UnicodeEncodeError tritt normalerweise auf, wenn Sie versuchen, den ersten UnicodeEncodeError zu übergeben, wenn dieser (oder eine andere Kodierung) erwartet wird.

ich es nicht versuchen können, gerade jetzt, aber man konnte

"xpath=//a[text()='Submit \xc2\xbb')]" 

statt Ihr Argument auf sie (die Sie über .encode('utf-8') bekommen) versuchen.

+0

(Hm, vergiss es. Ich habe das geschrieben, während Alex Martelli schon eine Antwort geschrieben hatte ...) – chryss

Verwandte Themen