【发布时间】:2019-05-27 00:03:11
【问题描述】:
我已经走到这一步了,打开 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;,它会向下翻页。提到了查看 send_keys https://www.rubydoc.info/gems/selenium-webdriver/Selenium%2FWebDriver%2FElement%3Asend_keys 的 ruby selenium 文档。我看到了一个关键代码列表 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。或者我可以手动向下翻页。但是滚动(至少在这个术语的正常意义上)似乎不是问题,我仍然得到那个错误。也许它在我可以切换到的框架中,但我不知道是哪个。
按钮当然是可见的。这只是一个普通的谷歌搜索页面。
我可以很好地找到该按钮,但我看不到如何单击它,因为 .click 不适合我。
添加
回复评论,询问我谷歌建议框是否混淆了按钮。我可以在浏览器中看到该按钮没有被混淆,因为有时我已经手动完成了转义,或者单击了背景窗口(以摆脱它。我正在使用 IRB,因此手动运行每个语句,所以我有时间这样做)。但是我也确实使用代码进行了转义,并且转义可以摆脱建议框,但尝试单击按钮时仍然出现同样的错误
【问题讨论】:
-
是否有搜索建议框 - 会混淆按钮?您可以通过向搜索框发送 ESC 键(我相信您可以轻松找到它的代码;)来隐藏它。
-
@Todor 我可以在浏览器中看到该按钮没有被混淆......;因为有时我已经手动完成了转义。但是我也确实使用代码进行了转义,并且转义可以摆脱建议框,但是尝试单击按钮时仍然出现同样的错误
-
您可以通过传递查询字符串直接导航到 SERP:
https://www.google.com/search?q=foo -
@CoreyGoldberg 你真的相信问这个问题的人不会知道吗?你向我展示的唯一一件事就是有一个缩写 SERP。接下来,您将向 IT 技术人员发布 cmets,告诉他们可以重新启动 Windows。
-
@barlop,“这个级别的问题”?我认为介于“完全新手”和“困惑的初学者”水平之间。所以回答你的问题...是的,我真的相信这一点。
标签: ruby selenium selenium-webdriver