Question

I use cucumber since one year, and I am adding page-object-gem into it since few weeks. When I execute the test, I get message :

DEPRECATION WARNING
You are calling a method named checkbox at commentPage.rb:23:in `block in delete_comment'.
This method does not exist in page-object so it is being passed to the driver.
This feature will be removed in the near future.
Please change your code to call the correct page-object method.

(I have got the same for other cases, but this "trivial" example should be easier to explain)

I search a way to avoid that, but it seems complicated.

For the test, I am checking a page, on which there is a table. Each row show a line, and I need to check the checkbox of a particular line.

My code in the pageObject:

table(:comment_list, :class => 'comments')
button(:delete, :text => "Delete")

def delete_comment (text)
  self.comment_list_element.each do |row|
    if row.text.include? "#{text}"
      row.checkbox.set
      self.delete
      return true
    end
  end
  false
end

Did I need a pretreatment of my table to use it during the test ?

Was it helpful?

Solution

You are getting the warning because you are calling a method that is on Watir and not page-object (checkbox method on a table row). If you want to access the Checkbox you can simply call the method that will return the nested element. This would change that portion of the call to row.checkbox_element. But you next call will also get the same issue. First of all the set method does not exist on CheckBox. In page-object the methods are check and uncheck. The full call should be:

row.checkbox_element.check

The reason you are getting the deprecation error is because I plan to remove the forwarding of calls to the underlying driver in the future. This ability really causes a lot of problems in complex situations.

OTHER TIPS

In your code, row is a PageObject::Elements::TableRow, which does not have a checkbox method defined. I have not come across any examples where page-object elements were chained.

As a workaround, you could convert the PageObject::Elements::TableRow to a regular Watir::TableRow by doing:

row.element

So your code will work if you do:

row.element.checkbox.set
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top