def test_pen_pointer_properties(driver, pages): pages.load("pointerActionsPage.html") pointerArea = driver.find_element(By.CSS_SELECTOR, "#pointerArea") pointer_input = PointerInput(interaction.POINTER_PEN, "pen") actions = ActionBuilder(driver, mouse=pointer_input) center = _get_inview_center(pointerArea.rect, _get_viewport_rect(driver)) actions.pointer_action.move_to(pointerArea) \ .pointer_down(pressure=0.36, tilt_x=-72, tilt_y=9, twist=86) \ .move_to(pointerArea, x=10, y=40) \ .pointer_up() \ .move_to(pointerArea, x=10, y=50) actions.perform() events = _get_events(driver) assert events[3]["type"] == "pointerdown" assert events[3]["pageX"] == pytest.approx(center["x"], abs=1.0) assert events[3]["pageY"] == pytest.approx(center["y"], abs=1.0) assert events[3]["target"] == "pointerArea" assert events[3]["pointerType"] == "pen" # The default value of width and height for mouse and pen inputs is 1 assert round(events[3]["width"], 2) == 1 assert round(events[3]["height"], 2) == 1 assert round(events[3]["pressure"], 2) == 0.36 assert events[3]["tiltX"] == -72 assert events[3]["tiltY"] == 9 assert events[3]["twist"] == 86 assert events[6]["type"] == "pointermove" assert events[6]["target"] == "pointerArea" assert events[6]["pointerType"] == "pen" assert round(events[6]["width"], 2) == 1 assert round(events[6]["height"], 2) == 1 # The default value of pressure for all inputs is 0.5, other properties are 0 assert round(events[6]["pressure"], 2) == 0.5 assert events[6]["tiltX"] == 0 assert events[6]["tiltY"] == 0 assert events[6]["twist"] == 0
def tap_at(self, x, y): actions = ActionBuilder(self.driver) p = actions.add_pointer_input("touch", "finger") p_actions = PointerActions(p) p.create_pointer_move(duration=0, x=x, y=y, origin='viewport') p_actions.pointer_down() p_actions.pause(0.2) p_actions.pointer_up() actions.perform()
def drawVerticalLine (driver, origin, radius): line_draw = ActionBuilder(driver) finger = line_draw.add_pointer_input(POINTER_TOUCH, 'finger') print(f"end hline at {origin['x']} and {origin['y']-radius}") finger.create_pointer_move(duration=0, x=origin['x'], y=origin['y']-radius) finger.create_pointer_down(MouseButton.LEFT) print(f"end hline at {origin['x']} and {origin['y']+radius}") finger.create_pointer_move(duration=100, x=origin['x'], y=origin['y']+radius) finger.create_pointer_up(MouseButton.LEFT) line_draw.perform()
def test_can_use_pointer_input_with_event_firing_webdriver(driver, pages): ef_driver = EventFiringWebDriver(driver, AbstractEventListener()) pages.load("javascriptPage.html") to_click = ef_driver.find_element(By.ID, "clickField") actions = ActionBuilder(ef_driver) pointer = actions.pointer_action pointer.move_to(to_click).click() actions.perform() assert to_click.get_attribute('value') == 'Clicked'
def test_context_click(driver, pages): pages.load("javascriptPage.html") toContextClick = driver.find_element_by_id("doubleClickField") actions = ActionBuilder(driver) pointer = actions.pointer_action pointer.context_click(toContextClick) actions.perform() assert "ContextClicked" == toContextClick.get_attribute('value')
def test_context_click(driver, pages): pages.load("javascriptPage.html") toContextClick = driver.find_element(By.ID, "doubleClickField") actions = ActionBuilder(driver) pointer = actions.pointer_action pointer.context_click(toContextClick) actions.perform() assert "ContextClicked" == toContextClick.get_attribute('value')
def drawCircle (driver, origin, radius, steps): firstPoint = get_point_on_circle(0, steps, origin, radius) circle_draw = ActionBuilder(driver) finger = circle_draw.add_pointer_input(POINTER_TOUCH, 'finger') finger.create_pointer_move(duration=0, x=firstPoint['x'], y=firstPoint['y']) finger.create_pointer_down(MouseButton.LEFT) for i in range(1, steps + 1): point = get_point_on_circle(i, steps, origin, radius) finger.create_pointer_move(duration=100, x=point['x'], y=point['y']) finger.create_pointer_up(MouseButton.LEFT) circle_draw.perform()
def test_can_use_key_input_with_event_firing_webdriver(driver, pages): ef_driver = EventFiringWebDriver(driver, AbstractEventListener()) pages.load("javascriptPage.html") ef_driver.find_element(By.ID, "keyUp").click() actions = ActionBuilder(ef_driver) key = actions.key_action key.send_keys('Success') actions.perform() result = ef_driver.find_element(By.ID, "result") assert result.text == 'Success'
def test_move_and_click(driver, pages): pages.load("javascriptPage.html") toClick = driver.find_element(By.ID, "clickField") actions = ActionBuilder(driver) pointer = actions.pointer_action pointer.move_to(toClick) \ .click() actions.perform() assert "Clicked" == toClick.get_attribute('value')
def test_move_and_click(driver, pages): pages.load("javascriptPage.html") toClick = driver.find_element_by_id("clickField") actions = ActionBuilder(driver) pointer = actions.pointer_action pointer.move_to(toClick) \ .click() actions.perform() assert "Clicked" == toClick.get_attribute('value')
def test_double_click(driver, pages): """Copied from org.openqa.selenium.interactions.TestBasicMouseInterface.""" pages.load("javascriptPage.html") toDoubleClick = driver.find_element(By.ID, "doubleClickField") actions = ActionBuilder(driver) pointer = actions.pointer_action pointer.double_click(toDoubleClick) actions.perform() assert "DoubleClicked" == toDoubleClick.get_attribute('value')
def test_double_click(driver, pages): """Copied from org.openqa.selenium.interactions.TestBasicMouseInterface.""" pages.load("javascriptPage.html") toDoubleClick = driver.find_element_by_id("doubleClickField") actions = ActionBuilder(driver) pointer = actions.pointer_action pointer.double_click(toDoubleClick) actions.perform() assert "DoubleClicked" == toDoubleClick.get_attribute('value')
def testSendingKeysToActiveElementWithModifier(driver, pages): pages.load("formPage.html") e = driver.find_element_by_id("working") e.click() actions = ActionBuilder(driver) key_action = actions.key_action key_action.key_down(Keys.SHIFT) \ .send_keys("abc") \ .key_up(Keys.SHIFT) actions.perform() assert "ABC" == e.get_attribute('value')
def testSendingKeysToActiveElementWithModifier(driver, pages): pages.load("formPage.html") e = driver.find_element(By.ID, "working") e.click() actions = ActionBuilder(driver) key_action = actions.key_action key_action.key_down(Keys.SHIFT) \ .send_keys("abc") \ .key_up(Keys.SHIFT) actions.perform() assert "ABC" == e.get_attribute('value')
def test_should_be_able_to_get_pointer_and_keyboard_inputs(driver, pages): actions = ActionBuilder(driver) pointers = actions.pointer_inputs keyboards = actions.key_inputs assert pointers is not None assert keyboards is not None
def test_can_scroll_mouse_wheel(driver, pages): pages.load("scrollingPage.html") driver.execute_script("document.scrollingElement.scrollTop = 0") scrollable = driver.find_element(By.CSS_SELECTOR, "#scrollable") wheel_input = WheelInput("wheel") actions = ActionBuilder(driver, wheel=wheel_input) actions.wheel_action.scroll(0, 0, 5, 10, 0, scrollable) actions.perform() events = _get_events(driver) assert len(events) == 1 assert events[0]["type"] == "wheel" assert events[0]["deltaX"] >= 5 assert events[0]["deltaY"] >= 10 assert events[0]["deltaZ"] == 0 assert events[0]["target"] == "scrollContent"
def test_can_create_pause_action_on_pointer(driver, pages): # If we don't get an error and takes less than 3 seconds to run, we are good # Disabled until pointer actions lands in marionette # import datetime # start = datetime.datetime.now() # actions1 = ActionBuilder(driver) # key_actions = actions1.pointer_action # key_actions.pause(1) # actions1.perform() # finish = datetime.datetime.now() # assert (finish - start).seconds < 3 # Add a filler step actions2 = ActionBuilder(driver) key_action = actions2.pointer_action key_action.pause() actions2.perform()
def _performDragAndDropWithMouse(driver, pages): """Copied from org.openqa.selenium.interactions.TestBasicMouseInterface.""" pages.load("draggableLists.html") dragReporter = driver.find_element(By.ID, "dragging_reports") toDrag = driver.find_element(By.ID, "rightitem-3") dragInto = driver.find_element(By.ID, "sortable1") actions = ActionBuilder(driver) pointer = actions.pointer_action pointer.click_and_hold(toDrag) \ .move_to(driver.find_element(By.ID, "leftitem-4")) \ .move_to(dragInto) \ .release() assert "Nothing happened." == dragReporter.text actions.perform() assert "Nothing happened. DragOut" in dragReporter.text
def _performDragAndDropWithMouse(driver, pages): """Copied from org.openqa.selenium.interactions.TestBasicMouseInterface.""" pages.load("draggableLists.html") dragReporter = driver.find_element_by_id("dragging_reports") toDrag = driver.find_element_by_id("rightitem-3") dragInto = driver.find_element_by_id("sortable1") actions = ActionBuilder(driver) pointer = actions.pointer_action pointer.click_and_hold(toDrag) \ .move_to(driver.find_element_by_id("leftitem-4")) \ .move_to(dragInto) \ .release() assert "Nothing happened." == dragReporter.text actions.perform() assert "Nothing happened. DragOut" in dragReporter.text
def test_touch_pointer_properties(driver, pages): pages.load("pointerActionsPage.html") pointerArea = driver.find_element(By.CSS_SELECTOR, "#pointerArea") center = _get_inview_center(pointerArea.rect, _get_viewport_rect(driver)) touch_input = PointerInput(interaction.POINTER_TOUCH, "touch") touch_chain = ActionBuilder(driver, mouse=touch_input) touch_chain.pointer_action.move_to(pointerArea, x=50, y=25) \ .pointer_down(width=23, height=31, pressure=0.78, tilt_x=21, tilt_y=-8, twist=355) \ .move_to(pointerArea, x=60, y=35, width=39, height=35, pressure=0.91, tilt_x=-19, tilt_y=62, twist=345) \ .pointer_up() \ .move_to(pointerArea, x=80, y=50) touch_chain.perform() events = _get_events(driver) assert len(events) == 7 event_types = [e["type"] for e in events] assert [ "pointerover", "pointerenter", "pointerdown", "pointermove", "pointerup", "pointerout", "pointerleave" ] == event_types assert events[2]["type"] == "pointerdown" assert events[2]["pageX"] == pytest.approx(center["x"], abs=1.0) assert events[2]["pageY"] == pytest.approx(center["y"], abs=1.0) assert events[2]["target"] == "pointerArea" assert events[2]["pointerType"] == "touch" assert round(events[2]["width"], 2) == 23 assert round(events[2]["height"], 2) == 31 assert round(events[2]["pressure"], 2) == 0.78 assert events[2]["tiltX"] == 21 assert events[2]["tiltY"] == -8 assert events[2]["twist"] == 355 assert events[3]["type"] == "pointermove" assert events[3]["pageX"] == pytest.approx(center["x"] + 10, abs=1.0) assert events[3]["pageY"] == pytest.approx(center["y"] + 10, abs=1.0) assert events[3]["target"] == "pointerArea" assert events[3]["pointerType"] == "touch" assert round(events[3]["width"], 2) == 39 assert round(events[3]["height"], 2) == 35 assert round(events[3]["pressure"], 2) == 0.91 assert events[3]["tiltX"] == -19 assert events[3]["tiltY"] == 62 assert events[3]["twist"] == 345
def testDragAndDrop(driver, pages): """Copied from org.openqa.selenium.interactions.TestBasicMouseInterface.""" element_available_timeout = 15 wait = WebDriverWait(driver, element_available_timeout) pages.load("droppableItems.html") wait.until(lambda dr: _isElementAvailable(driver, "draggable")) if not _isElementAvailable(driver, "draggable"): raise AssertionError("Could not find draggable element after 15 seconds.") toDrag = driver.find_element_by_id("draggable") dropInto = driver.find_element_by_id("droppable") actions = ActionBuilder(driver) pointer = actions.pointer_action pointer.click_and_hold(toDrag) \ .move_to(dropInto)\ .release() actions.perform() dropInto = driver.find_element_by_id("droppable") text = dropInto.find_element_by_tag_name("p").text assert "Dropped!" == text
def testDragAndDrop(driver, pages): """Copied from org.openqa.selenium.interactions.TestBasicMouseInterface.""" element_available_timeout = 15 wait = WebDriverWait(driver, element_available_timeout) pages.load("droppableItems.html") wait.until(lambda dr: _isElementAvailable(driver, "draggable")) if not _isElementAvailable(driver, "draggable"): raise AssertionError("Could not find draggable element after 15 seconds.") toDrag = driver.find_element(By.ID, "draggable") dropInto = driver.find_element(By.ID, "droppable") actions = ActionBuilder(driver) pointer = actions.pointer_action pointer.click_and_hold(toDrag) \ .move_to(dropInto)\ .release() actions.perform() dropInto = driver.find_element(By.ID, "droppable") text = dropInto.find_element(By.TAG_NAME, "p").text assert "Dropped!" == text
def test_can_create_pause_action_on_pointer(driver, pages): # If we don't get an error and takes less than 3 seconds to run, we are good import datetime start = datetime.datetime.now() actions1 = ActionBuilder(driver) key_actions = actions1.pointer_action key_actions.pause(1) actions1.perform() finish = datetime.datetime.now() assert (finish - start).seconds <= 3 # Add a filler step actions2 = ActionBuilder(driver) key_action = actions2.pointer_action key_action.pause() actions2.perform()
driver = webdriver.Remote(command_executor=APPIUM, desired_capabilities=CAPS) try: wait = WebDriverWait(driver, 20) wait.until( EC.presence_of_element_located( (MobileBy.ACCESSIBILITY_ID, 'Search for a place or address'))).send_keys('Vancouver, BC') wait.until( EC.presence_of_element_located( (MobileBy.ACCESSIBILITY_ID, 'Vancouver, BC'))).click() stanley_location = wait.until( EC.presence_of_element_located( (MobileBy.ACCESSIBILITY_ID, 'Stanley Park'))).location print(f'stanley is at {stanley_location}') longPress = ActionBuilder(driver) finger = longPress.add_pointer_input(POINTER_TOUCH, 'finger') finger.create_pointer_move(duration=0, x=stanley_location['x'], y=stanley_location['y']) finger.create_pointer_down(MouseButton.LEFT) finger.create_pause(2) finger.create_pointer_up(MouseButton.LEFT) longPress.perform() wait.until( EC.presence_of_element_located((MobileBy.ACCESSIBILITY_ID, 'Preview'))) dismissPress = ActionBuilder(driver) finger = dismissPress.add_pointer_input(POINTER_TOUCH, 'finger') finger.create_pointer_move(duration=0, x=100, y=100)
def test_can_clear_actions(driver, pages): actions = ActionBuilder(driver) actions.clear_actions()
} driver = webdriver.Remote( command_executor=APPIUM, desired_capabilities=CAPS ) try: wait = WebDriverWait(driver, 10) wait.until(EC.presence_of_element_located( (MobileBy.ACCESSIBILITY_ID, 'Graphics') )).click() wait.until(EC.presence_of_element_located( (MobileBy.ACCESSIBILITY_ID, 'AlphaBitmap') )) scroll = ActionBuilder(driver) finger = scroll.add_pointer_input(POINTER_TOUCH, 'finger') finger.create_pointer_move(duration=0, x=100, y=500) finger.create_pointer_down(MouseButton.LEFT) finger.create_pointer_move(duration=250, x=0, y=-500, origin="pointer") finger.create_pointer_up(MouseButton.LEFT) scroll.perform() driver.find_element(MobileBy.ACCESSIBILITY_ID, 'FingerPaint').click() wait.until(EC.presence_of_element_located( (MobileBy.XPATH, '//android.widget.TextView[contains(@text,"Graphics/FingerPaint")]') )) window_dimensions = driver.get_window_rect() print(f"window size {window_dimensions}") window_center = dict() window_center['x'] = window_dimensions.get('width')/2