Click with Offset & Better command.select_all
Click with offsets
As simple as that:
from selene import browser, command
...
browser.element('#point1').click(xoffset=-5, yoffset=5) # relative from center
browser.element('#point1').click() # still works as before (clicking at center)
# with js too:
browser.element('#point1').perform(command.js.click(xoffset=-5, yoffset=5))
browser.element('#point1').perform(command.js.click()) # also works
browser.element('#point1').perform(command.js.click) # still works as before
# or:
browser.element('#point1').with_(click_by_js=True).click(xoffset=-5, yoffset=5)
Smarter command.select_all
Seems like the send_keys(Keys.COMMAND + 'a' + Keys.NULL)
receipe has stopped working since some Selenium version...
So we update the command.select_all implementation to be based on ActionChains, and also work both on browser and element. Here go two examples that demonstrate the new behavior:
when called on element:
page.opened_with_body('<input id="text-field" value="text"></input>')
browser.element('#text-field').perform(command.select_all).type('reset')
browser.element('#text-field').should(have.value('reset'))
when called on browser:
page.opened_with_body('<input id="text-field" value="text"></input>')
browser.element('#text-field').click() # <- MANDATORY to make the input focused
browser.perform(command.select_all)
browser.element('#text-field').type('reset')
browser.element('#text-field').should(have.value('reset'))
qualname support in context of rendering conditions in error messages
Allows to simplify custom conditions implementation to something like:
class have:
@staticmethod
def attribute(entity):
if entity.attribute is None:
raise AssertionError('attribute is None')
Since the have.attribute
staticmethod will already have __qualname__
defined and equal to 'have.attribute'
, that will result in same rendering of the condition name in error messages on failed waiting (entity.wait.for_(condition)
) or assertion (via entity.should(condition)
).