Selenium Python 2.7 - 断言非 ascii 字符

Selenium Python 2.7 - asserting non-ascii characters

我在断言两个非 ascii 值时遇到问题。一个来自 csv 文件,另一个来自 html:

中的元素
<h1 class="LoginElement">登录</h1>

我正在使用 selenium 获取文本

w_msg = driver.find_element(By.CSS_SELECTOR, "h1.LoginElement").text

当我声明两个值时

assert txt in w_msg

我收到以下错误消息:

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

如果我同时打印变量及其类型:

print txt
print type(txt)
print w_msg
print type(w_msg)

它returns以下内容:

登入
<type 'str'>
登录
<type 'unicode'>

这就是我从 "Utility" class:

初始化 CSV 文件的方式
def open_csv(base_csv, file_name):
   csv_file = open(base_csv + file_name, 'rb')
   reader = csv.reader(csv_file, delimiter=',')
   row = list(reader)
   return row

下面是测试调用:

csv = Utility.open_csv(base_csv, file_name)

注意:我正在使用 OpenOffice Calc 构建 csv 并将其保存为 UTF-8

我已经尝试了很多在 SO 中找到的解决方案,但仍然无法正常工作。任何帮助或引导正确的方向将不胜感激。

Python 正在尝试将您的 str 转换为 Unicode 以进行比较。不幸的是,Python 2.x 旨在谨慎行事,只使用 ASCII 解码字符串。

您需要使用 CSV 文件的适当编码将 txt 解码为 Unicode,因此 Python 不必这样做。

您可以使用 txt.decode() 执行此操作,但最好的方法是让 Python 在您阅读文件时为您解码。

很遗憾,Python 2.x CSV 模块不支持 Unicode,因此您需要使用 drop in replacement:https://github.com/jdunck/python-unicodecsv

像这样使用它:

import unicodecsv

with open("myfile.csv") as my_csv:
    r = unicodecsv.reader(my_csv, encoding=YOURENCODING)

YOURENCODING 可能是 utf-8cp1252 或此处列出的任何编解码器:https://docs.python.org/2/library/codecs.html#standard-encodings

如果 CSV 来自 Excel 那么它很可能是一个以 cp

开头的编解码器