How to get a Selenium/Ruby bot to wait before perf

2020-02-10 06:16发布

I'm building a Selenium/Ruby web bot that clicks on elements. The problem is, sometimes there isn't enough time for the page to load before the bot decides it can't find the element.

What's the Ruby way to get Selenium to wait before performing an action? I would prefer explicit waiting, but I'm fine with implicit waiting too.


I tried to use the wait.until method:

require "selenium-webdriver"
require "nokogiri"
driver = Selenium::WebDriver.for :chrome
wait = Selenium::WebDriver::Wait.new(:timeout => 15)
driver.navigate.to "http://google.com"
driver.wait.until.find_element(:class, "gb_P").click

But I'm getting the following error:

Undefined method 'wait' for <Selenium::WebDriver>

I also tried:

require "watir-webdriver/wait"
...
driver.find_element(:class, "gb_P").wait_until.click

but that's also giving me an undefined method error:

undefined method `when_present' for #<Selenium::WebDriver...>

7条回答
萌系小妹纸
2楼-- · 2020-02-10 07:15

You can also simply use sleep(#) this will cause it to wait, and depending on your editor you can see which variations you can use so instead of seconds you can go to something lower or higher, in Ruby you don't even have to declare it.

Just type sleep and a number in the parenthesis and you should see it stop for that amount of time in seconds, others note why this is a solution that might not be optimal, but if you only need it to wait for a bit on a page that will never take that long it's great one line code to use.

查看更多
登录 后发表回答