Я использую xpath в Селене RC с помощью API Python.
Я должен нажать элемент, кто текст, "Отправляют»"
Вот ошибка, которую я получаю:
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)
sel.click (u "xpath = // a [text () = 'Submit \ xbb')]")
Можно писать выражения XPath, содержащие любые символы Unicode .
Например:
// a [text () = 'Submit »')]
Ожидает ли sel_click () строки Unicode или строки utf-8 (байтовые)? Ужасная ошибка UnicodeEncodeError обычно возникает, когда вы пытаетесь передать первую, когда ожидается последняя (или какая-либо другая кодировка).
Я не могу попробовать прямо сейчас, но вы можете попробовать
"xpath=//a[text()='Submit \xc2\xbb')]"
вместо аргумента (который вы получите, используя .encode ('utf-8')
).
Я думаю, вам просто нужно изменить
sel.click(u"xpath=//a[text()='Submit \xbb')]")
на
sel.click(u"xpath=//a[text()='Submit \xbb')]".encode('utf8'))
Это потому, что ошибка указывает на то, что Selenium пытается закодировать объект Unicode в байтовую строку (используя кодек по умолчанию для Python, то есть 'ascii'
), и именно это приводит к неудаче; Если сначала явно закодировать его самостоятельно, используя предположительно правильный кодек ('utf8'
, кодировка по умолчанию в XML), то можно избежать этой проблемы.