Я дошел до этого, открыв браузер Firefox, перейдя в Google и найдя поисковый элемент Google
irb(main):001:0> require 'selenium-webdriver'
=> true
irb(main):002:0> driver = Selenium::WebDriver.for:firefox
=> #<Selenium::WebDriver::Firefox::Marionette::Driver:0x..fb3c81796cc82b708 browser=:firefox>
irb(main):003:0> driver.navigate().to("http://www.google.com")
=> nil
irb(main):188:0> driver.find_element(:name, "q").send_keys "fff"
=> nil
irb(main):112:0> driver.find_element(:name, "btnK");
=> #<Selenium::WebDriver::Element:0x5fb450f4379c50ce id="d767311c-27a2-3544-8f11-e4edc9736588">
irb(main):113:0> driver.find_element(:name, "btnK").attribute('value');
=> "Google Search"
Но мне не удалось щелкнуть по нему!
irb(main):114:0> driver.find_element(:name, "btnK").click
Traceback (most recent call last):
16: from /usr/local/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/w3c/bridge.rb:552:in `execute'
15: from /usr/local/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/bridge.rb:166:in `execute'
14: from /usr/local/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/http/common.rb:62:in `call'
13: from /usr/local/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/http/default.rb:104:in `request'
12: from /usr/local/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/http/common.rb:84:in `create_response'
11: from /usr/local/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/http/common.rb:84:in `new'
10: from /usr/local/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/response.rb:32:in `initialize'
9: from /usr/local/lib/ruby/gems/2.5.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/response.rb:69:in `assert_ok'
8: from clickElement@chrome://marionette/content/listener.js:1209:5
7: from navigate@chrome://marionette/content/listener.js:409:13
6: from navigate/<@chrome://marionette/content/listener.js:410:13
5: from clickElement/<@chrome://marionette/content/listener.js:1210:14
4: from interaction.clickElement@chrome://marionette/content/interaction.js:130:11
3: from webdriverClickElement@chrome://marionette/content/interaction.js:159:11
2: from ElementNotInteractableError@chrome://marionette/content/error.js:286:5
1: from WebDriverError@chrome://marionette/content/error.js:178:5
Selenium::WebDriver::Error::ElementNotInteractableError (Element <input name="btnK" type="submit"> could not be scrolled into view)
irb(main):115:0>
Это говорит о том, что элемент "не может быть прокручен в поле зрения"!
Я могу сделать driver.find_element(:tag_name, "body").send_keys :page_down;
, что приведет к перебоям вниз.Что упомянуто? Смотрите документацию по селену ruby для send_keys https://www.rubydoc.info/gems/selenium-webdriver/Selenium%2FWebDriver%2FElement%3Asend_keys.Я вижу список кодов клавиш https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Keys#KEYS-constant.А также в списке https://github.com/SeleniumHQ/selenium/blob/master/rb/lib/selenium/webdriver/common/keys.rb.Или я могу страницу вниз вручную.Но прокрутка (по крайней мере, в обычном смысле этого слова), кажется, не проблема, я все еще получаю эту ошибку.Может быть, это в кадре, к которому я могу переключиться, и я не знаю, к какому.
Кнопка, конечно, видна.Это просто обычная страница поиска в Google.
Я могу найти кнопку в порядке, но не вижу, как нажать на нее, так как .click
не работает для меня.
добавлено
в ответ на комментарий, спрашивающий меня, не скрывает ли окно предложений Google кнопку.В браузере я вижу, что кнопка не запутана, потому что иногда я выполнял escape вручную или щелкал фоновое окно (чтобы избавиться от этого. Я использую IRB, поэтому каждый оператор выполняется вручную, поэтому у меня есть время, чтобы это сделать).Но я также сбежал с кодом, и escape работает, чтобы избавиться от окна предложения, но все равно та же ошибка при попытке нажать кнопку