Source code for capybara.queries.current_path_query

from capybara.compat import urlparse
from capybara.helpers import desc
from capybara.utils import isregex, normalize_url


[docs]class CurrentPathQuery(object): """ Queries the current path. Args: expected_path (str | RegexObject): The expected path. url (bool, optional): Whether the complete URL should match. Defaults to False. only_path (bool, optional): Whether only the path (excluding the query string) should match. Defaults to False. """ def __init__(self, expected_path, url=False, only_path=False): if url and only_path: raise RuntimeError("the url and only_path arguments cannot both be true") self.expected_path = expected_path self.actual_path = None self.url = url self.only_path = only_path
[docs] def resolves_for(self, session): """ Returns whether this query resolves for the given session. Args: session (Session): The session for which this query should be executed. Returns: bool: Whether this query resolves. """ if self.url: self.actual_path = session.current_url else: result = urlparse(session.current_url) if self.only_path: self.actual_path = result.path else: request_uri = result.path if result.query: request_uri += "?{0}".format(result.query) self.actual_path = request_uri if isregex(self.expected_path): return self.expected_path.search(self.actual_path) else: return normalize_url(self.actual_path) == normalize_url(self.expected_path)
@property def failure_message(self): """ str: A description of this query's failure. """ return self._build_message() @property def negative_failure_message(self): """ str: A description of this query's negative failure. """ return self._build_message(" not") def _build_message(self, negated=""): verb = "match" if isregex(self.expected_path) else "equal" return "expected {actual}{negated} to {verb} {expected}".format( actual=desc(self.actual_path), negated=negated, verb=verb, expected=desc(self.expected_path))