对于一个html网站。我需要获取具有相同类的元素的所有“数据”属性值。这些元素具有不同“数据”值的同一类。Ruby Webdriver。从页面中的元素获取所有'数据'值
div class="logo" data-channel="1"
其中data-channel =“N”是我需要的值,所以我可以构建一个不同的URL来导航到它。
我尝试了几种方法可以做到这一点没有成功: - 首先我试图让“数据”值作为我总是href和标题做属性:
filtros = @driver.find_elements(:class, "logo")
channels_data = []
filtros.each {|f|
channels_data += [ f[:data] ]
}
channels_data.each {|f|
puts "data: " + f
}
但我得到以下错误:
Failures:
1) itv_personalvideo Should test the channels
Failure/Error: puts "data: " + f
TypeError:
no implicit conversion of nil into String
# ./spec/2.2/_web_itv_pc_personalvideo.rb:149:in `+'
# ./spec/2.2/_web_itv_pc_personalvideo.rb:149:in `block (3 levels) in <top (required)>'
# ./spec/2.2/_web_itv_pc_personalvideo.rb:148:in `each'
# ./spec/2.2/_web_itv_pc_personalvideo.rb:148:in `block (2 levels) in <top (required)>'
- 第二我尝试直接运行的JavaScript代码,因为我已经在其他测试用例:
js_element = @driver.execute_script("document.querySelectorAll('.logo')[13].dataset.channel;")
puts js_element
但我有另一个错误:
Failures:
1) itv_personalvideo Should test the channels
Failure/Error: js_element = @driver.execute_script("document.querySelectorAll('.logo')[13].dataset.channel;")
Selenium::WebDriver::Error::UnknownError:
unknown error: Cannot read property 'dataset' of undefined
(Session info: chrome=47.0.2526.111)
(Driver info: chromedriver=2.20.353124 (035346203162d32c80f1dce587c8154a1efa0c3b),platform=Linux 3.16.0-4-amd64 x86_64)
# /home/usuario/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-2.47.1/lib/selenium/webdriver/remote/response.rb:71:in `assert_ok'
# /home/usuario/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-2.47.1/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
# /home/usuario/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-2.47.1/lib/selenium/webdriver/remote/http/common.rb:78:in `new'
# /home/usuario/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-2.47.1/lib/selenium/webdriver/remote/http/common.rb:78:in `create_response'
# /home/usuario/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-2.47.1/lib/selenium/webdriver/remote/http/default.rb:90:in `request'
# /home/usuario/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-2.47.1/lib/selenium/webdriver/remote/http/common.rb:59:in `call'
# /home/usuario/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-2.47.1/lib/selenium/webdriver/remote/bridge.rb:657:in `raw_execute'
# /home/usuario/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-2.47.1/lib/selenium/webdriver/remote/bridge.rb:635:in `execute'
# /home/usuario/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-2.47.1/lib/selenium/webdriver/remote/bridge.rb:360:in `executeScript'
# /home/usuario/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-2.47.1/lib/selenium/webdriver/common/driver.rb:212:in `execute_script'
# ./spec/2.2/_web_itv_pc_personalvideo.rb:123:in `block (2 levels) in <top (required)>'
这让我感到惊讶,因为在浏览器中,Javascript代码给了我,我需要的数量:
> document.querySelectorAll('.logo')[13].dataset.channel;
"16"
预先感谢您!
可悲的是,我们不使用的Watir,所以即时得到的错误“未定义的方法'attribute_value'为#” –