【问题标题】:how to select dropdown having Encoding::UndefinedConversionError in watir?如何在 watir 中选择具有 Encoding::UndefinedConversionError 的下拉菜单?
【发布时间】:2013-08-07 07:13:56
【问题描述】:

我想选择具有 text="Côte d'Ivoire" 的下拉菜单。

ie.select_list(:id, "name01").select("#{text}")

我试过这些代码,

1.encoding: UTF-8 #not working

2.text.force_encoding("ASCII-8BIT").encode('UTF-8', undef: :replace, replace:'') #text=科特迪瓦

我应该怎么做? 我也想将此文本保存到我的数据库中。请帮助。

【问题讨论】:

  • 能否请您添加一条错误消息(可能是完整的堆栈跟踪)并指定您使用的是什么版本的 Ruby 和 Watir?
  • @jnv Encoding::UndefinedConversionError,这是由于 text="Côte d'Ivoire" 因为它包含一些 ASCII-8BIT 到 UTF-8 的转换。 ruby 版本是 ruby​​193

标签: ruby utf-8 watir utf8-decode


【解决方案1】:

如果您知道字符串是 UTF-8 编码的,为什么不强制编码为 UTF-8?

#encoding: ASCII-8BIT
str = "C\xC3\xB4te d'Ivoire" # => "C\xC3\xB4te d'Ivoire"
str.encoding # => #<Encoding:ASCII-8BIT>

str.force_encoding('UTF-8')
str # => "Côte d'Ivoire"
str.encoding # => #<Encoding:UTF-8>

如果您在 Ruby 源文件中的任何位置使用 Côte d'Ivoire 作为文字,请务必添加

#encoding: UTF-8

作为文件的第一行告诉 Ruby 该文件是 UTF-8 编码的。

【讨论】:

  • 我已经尝试过这个东西,我也在我的问题中提到了它。即它对我不起作用,因为我试图用这个文本选择下拉菜单。
  • 您的问题表明您对函数使用了不同的参数。
  • 问题是当我使用这些选项时。这些替换“科特迪瓦”我的文本中产生问题的字符。所以当我根据文本值选择我的下拉列表时,没有找到值错误来了。
【解决方案2】:

我希望您的解决方案能够正常工作,除非您用于保存/执行文件的软件覆盖了该设置。我记得 NetBeans 有这个问题。

如果您无法修复实际编码,另一种方法是使用正则表达式来匹配标准字符。

text = /C.te d'Ivoire/
browser.select_list.select(text)

正则表达式已将所有重音字符替换为.

不是一个很好的解决方案,但如果没有其他方法,也许是一个解决方案。

【讨论】:

  • 问题是网页中有30个(可能更多)下拉选择选项。我把所有这些放在一个数组中,然后在这个数组上使用foreach循环来选择下拉菜单那个页面来测试一些东西。有 12 个选择选项会产生这个问题,我只提到一个,即 text="Côte d'Ivoire"
  • 如果你在循环所有的选项,为什么你需要通过文本选择它们?
  • 那我应该如何选择我所有的下拉选项?我想一个一个地选择它们来检查一些东西。
  • 您可以遍历所有选项并选择每个选项 - browser.select_list(:id, "name01").options.each{ |o| o.select; #do something }
猜你喜欢
  • 2015-06-16
  • 1970-01-01
  • 2015-07-27
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
相关资源
最近更新 更多