Example #1
0
class AddressInput(Component):
    """Objects and methods for the Address Input component."""

    ROOT_LOCATOR: Selector = Selectors.data_id('ride-request-search')
    _pick_up_field: Selector = Selectors.value('Custom Pickup')
    _pick_up_submit: Selector = Selectors.data_id('pickup-submit')
    _drop_off_field: Selector = Selectors.value('Custom Drop-off')
    _drop_off_submit: Selector = Selectors.data_id('dropoff-submit')

    @property
    def drop_off_field(self) -> WebElement:
        return self.container.find_element(*self._drop_off_field)

    @property
    def drop_off_submit(self) -> WebElement:
        """Return the submit button.

        self.page.driver is used as the button exists outside of the address input container.
        """
        return self.page.driver.find_element(*self._drop_off_submit)

    @property
    def pick_up_field(self) -> WebElement:
        return self.container.find_element(*self._pick_up_field)

    @property
    def pick_up_submit(self) -> WebElement:
        """Return the submit button.

        self.page.driver is used as the button exists outside of the address input container.
        """
        return self.page.driver.find_element(*self._pick_up_submit)

    @property
    def suggestions(self) -> AutocompleteSuggestions:
        return AutocompleteSuggestions(self)

    def select_drop_off_location(self, drop_off: str) -> None:
        """Fill out a drop off location, then submit the location.

        :param drop_off: The drop off location for a ride.
        """
        self.drop_off_field.fill(drop_off)
        self.suggestions.select_suggestion(drop_off)

        self.drop_off_submit.click()

    def select_pick_up_location(self, pick_up: str) -> None:
        """Fill out a pick up location, then submit the location.

        :param pick_up: The pick up location for a ride.
        """
        self.pick_up_field.fill(pick_up)
        self.suggestions.select_suggestion(pick_up)

        self.pick_up_submit.click()
class PickupTimeModal(Component):
    """Objects and methods for the Pickup Time Modal component."""

    ROOT_LOCATOR: Selector = Selectors.data_id('pickup-time-modal-container')
    _asap_ride_radio: Selector = Selectors.value('use-now')
    _future_ride_radio: Selector = Selectors.value('use-later')
    _back_button: Selector = Selectors.data_id('pickup-time-modal-back-button')
    _continue_button: Selector = Selectors.data_id(
        'pickup-time-modal-continue-button')
    _date_field: Selector = Selectors.data_id('pickup-time-modal-date-field')
    _time_field: Selector = Selectors.data_id('pickup-time-modal-time-field')

    @property
    def asap_ride_button(self) -> WebElement:
        return self.container.find_element(*self._asap_ride_radio)

    @property
    def back_button(self) -> WebElement:
        return self.container.find_element(*self._back_button)

    @property
    def continue_button(self) -> WebElement:
        return self.container.find_element(*self._continue_button)

    @property
    def date_field(self) -> WebElement:
        return self.container.find_element(*self._date_field)

    @property
    def future_ride_button(self) -> WebElement:
        return self.container.find_element(*self._future_ride_radio)

    @property
    def time_field(self) -> WebElement:
        return self.container.find_element(*self._time_field)

    def submit_pickup_time(self) -> None:
        """Submit a selected pick up time."""
        self.continue_button.click()