對於一個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'爲#」 –