I completely agree, WATIR does it's extraordinary performance in the case of stale element reference error, the only reason is because it continue to invoke the find_element until it finds the element and I know that's the reason WATIR avoids implicit wait. That's excellent. But you are not caring certain places which falls into the infinite loop which I explained earlier, For an example,
Consider this following code def set(*args) element_call(:wait_for_writable) do @element.clear @element.send_keys(*args) end end What my application does is, it refreshes the page after the clearing the element, So after @element.clear,( since page got refreshed), @element object is stale now, So @element.send_keys throws the error but it's been caught by the given block below begin send exist_check yield rescue Selenium::WebDriver::Error::StaleElementReferenceError retry ensure Wait.timer.reset! unless already_locked end So it is retrying, but what happens is, once again it starts from the beginning, So when it executes @element.clear, it once again goes to stale state, So it falls into the infinite loop and it never comes out. So what you would have done here is, you could have written the code like given below def set(*args) element_call(:wait_for_writable) do @element.send_keys([:control,"a"],*args) end end Now the problem solved because choosing the entire cell content and then writing on it automatically does the clearing Job. So the element doesn't go stale in this case. On Friday, March 24, 2017 at 12:25:36 PM UTC-7, Titus Fortner wrote: > > Yes, Watir is slower. Think of Selenium as a "Do What I Say" tool. If you > can enumerate exactly what you need using its low level commands then you > can be very performant. Watir is a "Do What I Mean" tool. Watir's goal is > not speed, but ease of writing, ease of maintenance, consistency of > results, and usefulness of error messages for debugging. > > There are many advantages to using Watir over Selenium directly which I > need to spend time enumerating in a blog post at some point, but the two > most important things that Watir does right now is automatically handle > Stale Element Reference errors (the bane of many test automation suites), > and automatically wait for the site's condition to be synchronized with > what is expected of the test based on the Watir code. There are many other > conveniences that may not always be needed but are provided by default so > that no user has to do extra work to handle it when it is necessary. > > Watir can slow things down a little or a lot depending on what you are > trying to do. I have some ideas to increase performance in some situations, > but again, my focus is primarily on making it easy for people who don't > know all the details of their website's implementation to get consistent > results. > > Titus > > > On Thursday, March 23, 2017 at 12:16:00 PM UTC-5, Raja gopalan wrote: >> >> Titus, I stongly believe checking enabled? present? writable? methods are >> unnecessary calls by WATIR because we know what kind of field we are going >> to interact so these calls to every element slows down the process So what >> I did was, I have CALLED the driver out of WATIR and started writing >> selenium code and wherever I want the help of WATIR help like >> b.table.rows.each, I will write watir code and also If I know there are >> certain element starts to appear after the click then I write watir code, >> So I am mixing the selenium code and WATIR code as shown below, >> >> For an example, look at the code below and see how I have mixed the >> selenium code and WATIR CODE >> >> require 'watir' >> >> class Cable >> >> def initialize >> caps = Selenium::WebDriver::Remote::Capabilities.firefox(marionette: >> false) >> @b=Watir::Browser.new :firefox, desired_capabilities: caps >> @b.goto 'smcnet.in/' >> @driver=@b.driver >> end >> >> def call >> @driver.find_element(:id, 'username').send_keys 'raja' >> @driver.find_element(:id, 'password').send_keys '' >> @driver.find_element(:xpath, "//*[@value='Log In']").click >> @driver.find_element(link: 'My Plan').click >> @b.element(xpath: "//span[normalize-space(.)='usage details']").click >> # WATIR CODE >> puts @b.div(:text, 'MB Used').following_sibling.span.text >> # WATIR CODE >> puts @b.div(:text, 'Days Remaining').following_sibling.span.text >> # WATIR CODE >> @driver.find_element(link: 'Hi, RAJAGOPALAN M').click >> @driver.find_element(:xpath, '//li[3]/a').click >> # @driver.quit >> end >> end >> >> >> On Thursday, March 23, 2017 at 10:06:26 AM UTC-7, Titus Fortner wrote: >>> >>> Yes, #present? is a combination of #exists? and #visible? >>> >>> Also, with Watir 6, you are less likely to need to make this call >>> explicitly in the code. Taking actions on an element will automatically >>> wait for element to be present if necessary. >>> >> -- -- Before posting, please read http://watir.com/support. In short: search before you ask, be nice. watir-general@googlegroups.com http://groups.google.com/group/watir-general watir-general+unsubscr...@googlegroups.com --- You received this message because you are subscribed to the Google Groups "Watir General" group. To unsubscribe from this group and stop receiving emails from it, send an email to watir-general+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.