我通过Python api在Selenium RC中使用xpath。
我需要点击一个文字是“提交”的元素
这是我得到的错误:
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)
答案 0 :(得分:3)
sel.click(u"xpath=//a[text()='Submit \xbb')]")
可以编写包含任何Unicode字符的XPath表达式。
例如:
//a[text()='Submit »')]
答案 1 :(得分:1)
我认为你只需要改变
sel.click(u"xpath=//a[text()='Submit \xbb')]")
到
sel.click(u"xpath=//a[text()='Submit \xbb')]".encode('utf8'))
那是因为错误表明Selenium正在尝试将Unicode对象编码为字节字符串(使用Python的默认编解码器,即'ascii'
),这就是失败的原因;通过首先自己显式编码,使用正确的编解码器('utf8'
,XML中的默认编码),您应该避免这个问题。
答案 2 :(得分:0)
sel_click()是否需要unicode字符串或utf-8(字节)字符串?可怕的UnicodeEncodeError通常在您尝试传入后者(或其他一些编码)的时候传入。
我现在不能尝试,但你可以试试
"xpath=//a[text()='Submit \xc2\xbb')]"
而不是你的论点(使用.encode('utf-8')
获得)。
答案 3 :(得分:0)
我使用selenium和roboframework 我有类似的问题。 我有一个带有特殊字符的Xpath,如下所示:
xpath=(//a[contains(@href,'Ontkoppel cliënt')])[1]
我不得不用ascii代码替换它并且工作正常。
xpath=(//a[contains(@href,'Ontkoppel cli\u00EBnt')])[1]
希望这个例子有点帮助...