Hello community, here is the log from the commit of package python-selenium for openSUSE:Factory checked in at 2018-08-04 21:54:36 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-selenium (Old) and /work/SRC/openSUSE:Factory/.python-selenium.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-selenium" Sat Aug 4 21:54:36 2018 rev:9 rq:627327 version:3.14.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-selenium/python-selenium.changes 2018-07-02 23:33:33.405241381 +0200 +++ /work/SRC/openSUSE:Factory/.python-selenium.new/python-selenium.changes 2018-08-04 21:54:41.169421501 +0200 @@ -1,0 +2,11 @@ +Fri Aug 3 11:55:47 UTC 2018 - tchva...@suse.com + +- Run the tests, taken from upstream git and issue filled upstream + +------------------------------------------------------------------- +Fri Aug 3 08:44:01 UTC 2018 - idon...@suse.com + +- Update to version 3.14.0 + * [py] Fix doc of URL-related ExpectedCondition (#6236) + +------------------------------------------------------------------- Old: ---- selenium-3.13.0.tar.gz New: ---- selenium-3.14.0.tar.gz selenium-pytest.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-selenium.spec ++++++ --- /var/tmp/diff_new_pack.cRDGKw/_old 2018-08-04 21:54:41.653422407 +0200 +++ /var/tmp/diff_new_pack.cRDGKw/_new 2018-08-04 21:54:41.653422407 +0200 @@ -18,19 +18,24 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-selenium -Version: 3.13.0 +Version: 3.14.0 Release: 0 Summary: Python bindings for Selenium License: Apache-2.0 Group: Development/Languages/Python URL: https://github.com/SeleniumHQ/selenium Source: https://files.pythonhosted.org/packages/source/s/selenium/selenium-%{version}.tar.gz -BuildRequires: %{python_module devel} +#https://github.com/SeleniumHQ/selenium/issues/6246 +Source1: selenium-pytest.tar.bz2 +BuildRequires: %{python_module pytest-mock} +BuildRequires: %{python_module pytest} BuildRequires: %{python_module rdflib} BuildRequires: %{python_module setuptools} +BuildRequires: %{python_module urllib3} BuildRequires: fdupes BuildRequires: python-rpm-macros Requires: python-rdflib +Requires: python-urllib3 ExclusiveArch: %{ix86} x86_64 %python_subpackages @@ -42,7 +47,7 @@ supported, as well as the Selenium 1.0 bindings. %prep -%setup -q -n selenium-%{version} +%setup -q -n selenium-%{version} -a1 %build %python_build @@ -55,6 +60,10 @@ %python_expand rm %{buildroot}%{$python_sitelib}/selenium/webdriver/firefox/amd64/x_ignore_nofocus.so %endif +%check +export PYTHONDONTWRITEBYTECODE=1 +%python_expand PYTHONPATH=%{buildroot}%{$python_sitelib} py.test-%{$python_version} test/unit + %files %{python_files} %doc README.rst CHANGES %{python_sitelib}/selenium* ++++++ selenium-3.13.0.tar.gz -> selenium-3.14.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selenium-3.13.0/CHANGES new/selenium-3.14.0/CHANGES --- old/selenium-3.13.0/CHANGES 2018-06-25 16:37:37.000000000 +0200 +++ new/selenium-3.14.0/CHANGES 2018-08-02 15:06:22.000000000 +0200 @@ -1,3 +1,10 @@ +Selenium 3.14.0 +* Fix doc of URL-related ExpectedCondition (#6236) +* Added ExpectedCondition invisibility_of_element +* Swap out httplib for urllib3 +* Be consistent with webdriver init kwarg service_log_path (#5725) + + Selenium 3.13.0 * Add executing Chrome devtools command (#5989) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selenium-3.13.0/PKG-INFO new/selenium-3.14.0/PKG-INFO --- old/selenium-3.13.0/PKG-INFO 2018-06-25 21:49:40.000000000 +0200 +++ new/selenium-3.14.0/PKG-INFO 2018-08-02 15:22:42.000000000 +0200 @@ -1,12 +1,11 @@ -Metadata-Version: 1.1 +Metadata-Version: 1.2 Name: selenium -Version: 3.13.0 +Version: 3.14.0 Summary: Python bindings for Selenium Home-page: https://github.com/SeleniumHQ/selenium/ -Author: UNKNOWN -Author-email: UNKNOWN +Maintainer: david.burns +Maintainer-email: david.bu...@theautomatedtester.co.uk License: Apache 2.0 -Description-Content-Type: UNKNOWN Description: ====================== Selenium Client Driver ====================== @@ -44,7 +43,7 @@ pip install -U selenium - Alternately, you can download the source distribution from `PyPI <https://pypi.org/project/selenium/#files>`_ (e.g. selenium-3.13.0.tar.gz), unarchive it, and run:: + Alternately, you can download the source distribution from `PyPI <https://pypi.org/project/selenium/#files>`_ (e.g. selenium-3.14.0.tar.gz), unarchive it, and run:: python setup.py install @@ -109,7 +108,7 @@ Example 2: ========== - Selenium WebDriver is often used as a basis for testing web applications. Here is a simple example uisng Python's standard `unittest <http://docs.python.org/3/library/unittest.html>`_ library: + Selenium WebDriver is often used as a basis for testing web applications. Here is a simple example using Python's standard `unittest <http://docs.python.org/3/library/unittest.html>`_ library: .. code-block:: python @@ -136,11 +135,11 @@ However, to use Selenium Webdriver Remote or the legacy Selenium API (Selenium-RC), you need to also run the Selenium server. The server requires a Java Runtime Environment (JRE). - Download the server separately, from: http://selenium-release.storage.googleapis.com/3.13/selenium-server-standalone-3.13.0.jar + Download the server separately, from: http://selenium-release.storage.googleapis.com/3.14/selenium-server-standalone-3.14.0.jar Run the server from the command line:: - java -jar selenium-server-standalone-3.13.0.jar + java -jar selenium-server-standalone-3.14.0.jar Then run your Python client scripts. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selenium-3.13.0/README.rst new/selenium-3.14.0/README.rst --- old/selenium-3.13.0/README.rst 2018-06-25 16:33:22.000000000 +0200 +++ new/selenium-3.14.0/README.rst 2018-07-26 11:59:38.000000000 +0200 @@ -35,7 +35,7 @@ pip install -U selenium -Alternately, you can download the source distribution from `PyPI <https://pypi.org/project/selenium/#files>`_ (e.g. selenium-3.13.0.tar.gz), unarchive it, and run:: +Alternately, you can download the source distribution from `PyPI <https://pypi.org/project/selenium/#files>`_ (e.g. selenium-3.14.0.tar.gz), unarchive it, and run:: python setup.py install @@ -100,7 +100,7 @@ Example 2: ========== -Selenium WebDriver is often used as a basis for testing web applications. Here is a simple example uisng Python's standard `unittest <http://docs.python.org/3/library/unittest.html>`_ library: +Selenium WebDriver is often used as a basis for testing web applications. Here is a simple example using Python's standard `unittest <http://docs.python.org/3/library/unittest.html>`_ library: .. code-block:: python @@ -127,11 +127,11 @@ However, to use Selenium Webdriver Remote or the legacy Selenium API (Selenium-RC), you need to also run the Selenium server. The server requires a Java Runtime Environment (JRE). -Download the server separately, from: http://selenium-release.storage.googleapis.com/3.13/selenium-server-standalone-3.13.0.jar +Download the server separately, from: http://selenium-release.storage.googleapis.com/3.14/selenium-server-standalone-3.14.0.jar Run the server from the command line:: - java -jar selenium-server-standalone-3.13.0.jar + java -jar selenium-server-standalone-3.14.0.jar Then run your Python client scripts. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selenium-3.13.0/selenium/__init__.py new/selenium-3.14.0/selenium/__init__.py --- old/selenium-3.13.0/selenium/__init__.py 2018-06-25 16:33:22.000000000 +0200 +++ new/selenium-3.14.0/selenium/__init__.py 2018-07-26 11:59:38.000000000 +0200 @@ -16,4 +16,4 @@ # under the License. -__version__ = "3.13.0" +__version__ = "3.14.0" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selenium-3.13.0/selenium/webdriver/__init__.py new/selenium-3.14.0/selenium/webdriver/__init__.py --- old/selenium-3.13.0/selenium/webdriver/__init__.py 2018-06-25 16:38:06.000000000 +0200 +++ new/selenium-3.14.0/selenium/webdriver/__init__.py 2018-08-02 14:59:35.000000000 +0200 @@ -36,4 +36,4 @@ from .common.touch_actions import TouchActions # noqa from .common.proxy import Proxy # noqa -__version__ = '3.13.0' +__version__ = '3.14.0' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selenium-3.13.0/selenium/webdriver/common/action_chains.py new/selenium-3.14.0/selenium/webdriver/common/action_chains.py --- old/selenium-3.13.0/selenium/webdriver/common/action_chains.py 2017-12-08 05:51:14.000000000 +0100 +++ new/selenium-3.14.0/selenium/webdriver/common/action_chains.py 2018-07-26 11:59:38.000000000 +0200 @@ -199,7 +199,7 @@ """ if self._driver.w3c: self.w3c_actions.pointer_action.click_and_hold(source) \ - .move_to_location(xoffset, yoffset) \ + .move_by(xoffset, yoffset) \ .release() for _ in range(3): self.w3c_actions.key_action.pause() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selenium-3.13.0/selenium/webdriver/edge/webdriver.py new/selenium-3.14.0/selenium/webdriver/edge/webdriver.py --- old/selenium-3.13.0/selenium/webdriver/edge/webdriver.py 2017-05-29 21:32:48.000000000 +0200 +++ new/selenium-3.14.0/selenium/webdriver/edge/webdriver.py 2018-07-26 11:59:38.000000000 +0200 @@ -14,6 +14,7 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. +import warnings from selenium.webdriver.common import utils from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver @@ -25,12 +26,16 @@ class WebDriver(RemoteWebDriver): def __init__(self, executable_path='MicrosoftWebDriver.exe', - capabilities=None, port=0, verbose=False, log_path=None): + capabilities=None, port=0, verbose=False, service_log_path=None, log_path=None): + if log_path: + warnings.warn('use service_log_path instead of log_path', DeprecationWarning) + service_log_path = log_path + self.port = port if self.port == 0: self.port = utils.free_port() - self.edge_service = Service(executable_path, port=self.port, verbose=verbose, log_path=log_path) + self.edge_service = Service(executable_path, port=self.port, verbose=verbose, log_path=service_log_path) self.edge_service.start() if capabilities is None: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selenium-3.13.0/selenium/webdriver/firefox/webdriver.py new/selenium-3.14.0/selenium/webdriver/firefox/webdriver.py --- old/selenium-3.13.0/selenium/webdriver/firefox/webdriver.py 2018-04-23 15:14:30.000000000 +0200 +++ new/selenium-3.14.0/selenium/webdriver/firefox/webdriver.py 2018-08-02 14:55:40.000000000 +0200 @@ -17,17 +17,11 @@ import warnings try: - import http.client as http_client -except ImportError: - import httplib as http_client - -try: basestring except NameError: # Python 3.x basestring = str import shutil -import socket import sys from contextlib import contextmanager @@ -56,8 +50,8 @@ def __init__(self, firefox_profile=None, firefox_binary=None, timeout=30, capabilities=None, proxy=None, executable_path="geckodriver", options=None, - log_path="geckodriver.log", firefox_options=None, - service_args=None, desired_capabilities=None): + service_log_path="geckodriver.log", firefox_options=None, + service_args=None, desired_capabilities=None, log_path=None): """Starts a new local session of Firefox. Based on the combination and specificity of the various keyword @@ -100,12 +94,15 @@ binary to use for Firefox 47.0.1 and greater, which defaults to picking up the binary from the system path. :param options: Instance of ``options.Options``. - :param log_path: Where to log information from the driver. + :param service_log_path: Where to log information from the driver. :param desired_capabilities: alias of capabilities. In future versions of this library, this will replace 'capabilities'. This will make the signature consistent with RemoteWebDriver. """ + if log_path: + warnings.warn('use service_log_path instead of log_path', DeprecationWarning) + service_log_path = log_path if firefox_options: warnings.warn('use options instead of firefox_options', DeprecationWarning) options = firefox_options @@ -156,7 +153,7 @@ self.service = Service( executable_path, service_args=service_args, - log_path=log_path) + log_path=service_log_path) self.service.start() capabilities.update(options.to_capabilities()) @@ -197,9 +194,8 @@ """Quits the driver and close every associated window.""" try: RemoteWebDriver.quit(self) - except (http_client.BadStatusLine, socket.error): - # Happens if Firefox shutsdown before we've read the response from - # the socket. + except Exception: + # We don't care about the message because something probably has gone wrong pass if self.w3c: Binary files old/selenium-3.13.0/selenium/webdriver/firefox/webdriver.xpi and new/selenium-3.14.0/selenium/webdriver/firefox/webdriver.xpi differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selenium-3.13.0/selenium/webdriver/ie/webdriver.py new/selenium-3.14.0/selenium/webdriver/ie/webdriver.py --- old/selenium-3.13.0/selenium/webdriver/ie/webdriver.py 2018-03-29 16:48:54.000000000 +0200 +++ new/selenium-3.14.0/selenium/webdriver/ie/webdriver.py 2018-07-26 11:59:38.000000000 +0200 @@ -25,7 +25,7 @@ DEFAULT_PORT = 0 DEFAULT_HOST = None DEFAULT_LOG_LEVEL = None -DEFAULT_LOG_FILE = None +DEFAULT_SERVICE_LOG_PATH = None class WebDriver(RemoteWebDriver): @@ -33,8 +33,8 @@ def __init__(self, executable_path='IEDriverServer.exe', capabilities=None, port=DEFAULT_PORT, timeout=DEFAULT_TIMEOUT, host=DEFAULT_HOST, - log_level=DEFAULT_LOG_LEVEL, log_file=DEFAULT_LOG_FILE, options=None, - ie_options=None, desired_capabilities=None): + log_level=DEFAULT_LOG_LEVEL, service_log_path=DEFAULT_SERVICE_LOG_PATH, options=None, + ie_options=None, desired_capabilities=None, log_file=None): """ Creates a new instance of the chrome driver. @@ -45,10 +45,13 @@ - capabilities: capabilities Dictionary object - port - port you would like the service to run, if left as 0, a free port will be found. - log_level - log level you would like the service to run. - - log_file - log file you would like the service to log to. + - service_log_path - target of logging of service, may be "stdout", "stderr" or file path. - options: IE Options instance, providing additional IE options - desired_capabilities: alias of capabilities; this will make the signature consistent with RemoteWebDriver. """ + if log_file: + warnings.warn('use service_log_path instead of log_file', DeprecationWarning) + service_log_path = log_file if ie_options: warnings.warn('use options instead of ie_options', DeprecationWarning) options = ie_options @@ -56,8 +59,6 @@ if self.port == 0: self.port = utils.free_port() self.host = host - self.log_level = log_level - self.log_file = log_file # If both capabilities and desired capabilities are set, ignore desired capabilities. if capabilities is None and desired_capabilities: @@ -77,8 +78,8 @@ executable_path, port=self.port, host=self.host, - log_level=self.log_level, - log_file=self.log_file) + log_level=log_level, + log_file=service_log_path) self.iedriver.start() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selenium-3.13.0/selenium/webdriver/remote/remote_connection.py new/selenium-3.14.0/selenium/webdriver/remote/remote_connection.py --- old/selenium-3.13.0/selenium/webdriver/remote/remote_connection.py 2018-06-25 15:11:27.000000000 +0200 +++ new/selenium-3.14.0/selenium/webdriver/remote/remote_connection.py 2018-08-02 14:55:40.000000000 +0200 @@ -15,19 +15,17 @@ # specific language governing permissions and limitations # under the License. +import base64 import logging +import platform import socket import string -import base64 -import platform + +import urllib3 try: - import http.client as httplib - from urllib import request as url_request from urllib import parse except ImportError: # above is available in py3+, below is py2.7 - import httplib as httplib - import urllib2 as url_request import urlparse as parse from selenium.webdriver.common import utils as common_utils @@ -39,98 +37,6 @@ LOGGER = logging.getLogger(__name__) -class Request(url_request.Request): - """ - Extends the url_request.Request to support all HTTP request types. - """ - - def __init__(self, url, data=None, method=None): - """ - Initialise a new HTTP request. - - :Args: - - url - String for the URL to send the request to. - - data - Data to send with the request. - """ - if method is None: - method = data is not None and 'POST' or 'GET' - elif method != 'POST' and method != 'PUT': - data = None - self._method = method - url_request.Request.__init__(self, url, data=data) - - def get_method(self): - """ - Returns the HTTP method used by this request. - """ - return self._method - - -class Response(object): - """ - Represents an HTTP response. - """ - - def __init__(self, fp, code, headers, url): - """ - Initialise a new Response. - - :Args: - - fp - The response body file object. - - code - The HTTP status code returned by the server. - - headers - A dictionary of headers returned by the server. - - url - URL of the retrieved resource represented by this Response. - """ - self.fp = fp - self.read = fp.read - self.code = code - self.headers = headers - self.url = url - - def close(self): - """ - Close the response body file object. - """ - self.read = None - self.fp = None - - def info(self): - """ - Returns the response headers. - """ - return self.headers - - def geturl(self): - """ - Returns the URL for the resource returned in this response. - """ - return self.url - - -class HttpErrorHandler(url_request.HTTPDefaultErrorHandler): - """ - A custom HTTP error handler. - - Used to return Response objects instead of raising an HTTPError exception. - """ - - def http_error_default(self, req, fp, code, msg, headers): - """ - Default HTTP error handler. - - :Args: - - req - The original Request object. - - fp - The response body file object. - - code - The HTTP status code returned by the server. - - msg - The HTTP status message returned by the server. - - headers - The response headers. - - :Returns: - A new Response object. - """ - return Response(fp, code, headers, req.get_full_url()) - - class RemoteConnection(object): """A connection with the Remote WebDriver server. @@ -201,7 +107,6 @@ # Attempt to resolve the hostname and get an IP address. self.keep_alive = keep_alive parsed_url = parse.urlparse(remote_server_addr) - addr = parsed_url.hostname if parsed_url.hostname and resolve_ip: port = parsed_url.port or None if parsed_url.scheme == "https": @@ -215,7 +120,6 @@ port=port) if ip: netloc = ip - addr = netloc if parsed_url.port: netloc = common_utils.join_host_port(netloc, parsed_url.port) @@ -233,8 +137,7 @@ self._url = remote_server_addr if keep_alive: - self._conn = httplib.HTTPConnection( - str(addr), str(parsed_url.port), timeout=self._timeout) + self._conn = urllib3.PoolManager() self._commands = { Command.STATUS: ('GET', '/status'), @@ -487,88 +390,51 @@ parsed_url = parse.urlparse(url) headers = self.get_remote_connection_headers(parsed_url, self.keep_alive) - + resp = None if self.keep_alive: if body and method != 'POST' and method != 'PUT': body = None - try: - self._conn.request(method, parsed_url.path, body, headers) - resp = self._conn.getresponse() - except (httplib.HTTPException, socket.error): - self._conn.close() - raise + resp = self._conn.request(method, url, body=body, headers=headers) statuscode = resp.status else: - password_manager = None - if parsed_url.username: - netloc = parsed_url.hostname - if parsed_url.port: - netloc += ":%s" % parsed_url.port - cleaned_url = parse.urlunparse(( - parsed_url.scheme, - netloc, - parsed_url.path, - parsed_url.params, - parsed_url.query, - parsed_url.fragment)) - password_manager = url_request.HTTPPasswordMgrWithDefaultRealm() - password_manager.add_password(None, - "%s://%s" % (parsed_url.scheme, netloc), - parsed_url.username, - parsed_url.password) - request = Request(cleaned_url, data=body.encode('utf-8'), method=method) - else: - request = Request(url, data=body.encode('utf-8'), method=method) - - for key, val in headers.items(): - request.add_header(key, val) + http = urllib3.PoolManager() + resp = http.request(method, url, body=body, headers=headers) - if password_manager: - opener = url_request.build_opener(url_request.HTTPRedirectHandler(), - HttpErrorHandler(), - url_request.HTTPBasicAuthHandler(password_manager)) - else: - opener = url_request.build_opener(url_request.HTTPRedirectHandler(), - HttpErrorHandler()) - resp = opener.open(request, timeout=self._timeout) - statuscode = resp.code + statuscode = resp.status if not hasattr(resp, 'getheader'): if hasattr(resp.headers, 'getheader'): resp.getheader = lambda x: resp.headers.getheader(x) elif hasattr(resp.headers, 'get'): resp.getheader = lambda x: resp.headers.get(x) - data = resp.read() - LOGGER.debug(data) + data = resp.data.decode('UTF-8') try: if 300 <= statuscode < 304: return self._request('GET', resp.getheader('location')) - body = data.decode('utf-8').replace('\x00', '').strip() if 399 < statuscode <= 500: - return {'status': statuscode, 'value': body} + return {'status': statuscode, 'value': data} content_type = [] if resp.getheader('Content-Type') is not None: content_type = resp.getheader('Content-Type').split(';') if not any([x.startswith('image/png') for x in content_type]): + try: - data = utils.load_json(body.strip()) + data = utils.load_json(data.strip()) except ValueError: if 199 < statuscode < 300: status = ErrorCode.SUCCESS else: status = ErrorCode.UNKNOWN_ERROR - return {'status': status, 'value': body.strip()} + return {'status': status, 'value': data.strip()} - assert type(data) is dict, ( - 'Invalid server response body: %s' % body) # Some of the drivers incorrectly return a response # with no 'value' field when they should return null. if 'value' not in data: data['value'] = None return data else: - data = {'status': 0, 'value': body.strip()} + data = {'status': 0, 'value': data} return data finally: LOGGER.debug("Finished Request") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selenium-3.13.0/selenium/webdriver/remote/utils.py new/selenium-3.14.0/selenium/webdriver/remote/utils.py --- old/selenium-3.13.0/selenium/webdriver/remote/utils.py 2017-05-29 21:32:48.000000000 +0200 +++ new/selenium-3.14.0/selenium/webdriver/remote/utils.py 2018-08-02 14:55:40.000000000 +0200 @@ -21,7 +21,6 @@ import tempfile import zipfile -from selenium.common.exceptions import NoSuchElementException LOGGER = logging.getLogger(__name__) @@ -38,28 +37,6 @@ return json.loads(s) -def handle_find_element_exception(e): - if ("Unable to find" in e.response["value"]["message"] or "Unable to locate" in e.response["value"]["message"]): - raise NoSuchElementException("Unable to locate element:") - else: - raise e - - -def return_value_if_exists(resp): - if resp and "value" in resp: - return resp["value"] - - -def get_root_parent(elem): - parent = elem.parent - while True: - try: - parent.parent - parent = parent.parent - except AttributeError: - return parent - - def unzip_to_temp_dir(zip_file_name): """Unzip zipfile to a temporary directory. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selenium-3.13.0/selenium/webdriver/support/expected_conditions.py new/selenium-3.14.0/selenium/webdriver/support/expected_conditions.py --- old/selenium-3.13.0/selenium/webdriver/support/expected_conditions.py 2017-12-08 05:51:14.000000000 +0100 +++ new/selenium-3.14.0/selenium/webdriver/support/expected_conditions.py 2018-08-02 14:55:40.000000000 +0200 @@ -20,6 +20,7 @@ from selenium.common.exceptions import StaleElementReferenceException from selenium.common.exceptions import WebDriverException from selenium.common.exceptions import NoAlertPresentException +from selenium.webdriver.remote.webdriver import WebElement """ * Canned "Expected Conditions" which are generally useful within webdriver @@ -67,7 +68,7 @@ """ An expectation for checking that the current url contains a case-sensitive substring. url is the fragment of url expected, - returns True when the title matches, False otherwise + returns True when the url matches, False otherwise """ def __init__(self, url): self.url = url @@ -79,7 +80,7 @@ class url_matches(object): """An expectation for checking the current url. pattern is the expected pattern, which must be an exact match - returns True if the title matches, false otherwise.""" + returns True if the url matches, false otherwise.""" def __init__(self, pattern): self.pattern = pattern @@ -93,7 +94,7 @@ class url_to_be(object): """An expectation for checking the current url. url is the expected url, which must be an exact match - returns True if the title matches, false otherwise.""" + returns True if the url matches, false otherwise.""" def __init__(self, url): self.url = url @@ -259,11 +260,14 @@ locator used to find the element """ def __init__(self, locator): - self.locator = locator + self.target = locator def __call__(self, driver): try: - return _element_if_visible(_find_element(driver, self.locator), False) + target = self.target + if not isinstance(target, WebElement): + target = _find_element(driver, target) + return _element_if_visible(target, False) except (NoSuchElementException, StaleElementReferenceException): # In the case of NoSuchElement, returns true because the element is # not present in DOM. The try block checks if the element is present @@ -273,6 +277,16 @@ return True +class invisibility_of_element(invisibility_of_element_located): + """ An Expectation for checking that an element is either invisible or not + present on the DOM. + + element is either a locator (text) or an WebElement + """ + def __init(self, element): + self.target = element + + class element_to_be_clickable(object): """ An Expectation for checking an element is visible and enabled such that you can click it.""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selenium-3.13.0/selenium.egg-info/PKG-INFO new/selenium-3.14.0/selenium.egg-info/PKG-INFO --- old/selenium-3.13.0/selenium.egg-info/PKG-INFO 2018-06-25 21:49:39.000000000 +0200 +++ new/selenium-3.14.0/selenium.egg-info/PKG-INFO 2018-08-02 15:22:42.000000000 +0200 @@ -1,12 +1,11 @@ -Metadata-Version: 1.1 +Metadata-Version: 1.2 Name: selenium -Version: 3.13.0 +Version: 3.14.0 Summary: Python bindings for Selenium Home-page: https://github.com/SeleniumHQ/selenium/ -Author: UNKNOWN -Author-email: UNKNOWN +Maintainer: david.burns +Maintainer-email: david.bu...@theautomatedtester.co.uk License: Apache 2.0 -Description-Content-Type: UNKNOWN Description: ====================== Selenium Client Driver ====================== @@ -44,7 +43,7 @@ pip install -U selenium - Alternately, you can download the source distribution from `PyPI <https://pypi.org/project/selenium/#files>`_ (e.g. selenium-3.13.0.tar.gz), unarchive it, and run:: + Alternately, you can download the source distribution from `PyPI <https://pypi.org/project/selenium/#files>`_ (e.g. selenium-3.14.0.tar.gz), unarchive it, and run:: python setup.py install @@ -109,7 +108,7 @@ Example 2: ========== - Selenium WebDriver is often used as a basis for testing web applications. Here is a simple example uisng Python's standard `unittest <http://docs.python.org/3/library/unittest.html>`_ library: + Selenium WebDriver is often used as a basis for testing web applications. Here is a simple example using Python's standard `unittest <http://docs.python.org/3/library/unittest.html>`_ library: .. code-block:: python @@ -136,11 +135,11 @@ However, to use Selenium Webdriver Remote or the legacy Selenium API (Selenium-RC), you need to also run the Selenium server. The server requires a Java Runtime Environment (JRE). - Download the server separately, from: http://selenium-release.storage.googleapis.com/3.13/selenium-server-standalone-3.13.0.jar + Download the server separately, from: http://selenium-release.storage.googleapis.com/3.14/selenium-server-standalone-3.14.0.jar Run the server from the command line:: - java -jar selenium-server-standalone-3.13.0.jar + java -jar selenium-server-standalone-3.14.0.jar Then run your Python client scripts. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selenium-3.13.0/selenium.egg-info/SOURCES.txt new/selenium-3.14.0/selenium.egg-info/SOURCES.txt --- old/selenium-3.13.0/selenium.egg-info/SOURCES.txt 2018-06-25 21:49:40.000000000 +0200 +++ new/selenium-3.14.0/selenium.egg-info/SOURCES.txt 2018-08-02 15:22:42.000000000 +0200 @@ -8,6 +8,7 @@ selenium.egg-info/SOURCES.txt selenium.egg-info/dependency_links.txt selenium.egg-info/not-zip-safe +selenium.egg-info/requires.txt selenium.egg-info/top_level.txt selenium/common/__init__.py selenium/common/exceptions.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selenium-3.13.0/selenium.egg-info/requires.txt new/selenium-3.14.0/selenium.egg-info/requires.txt --- old/selenium-3.13.0/selenium.egg-info/requires.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/selenium-3.14.0/selenium.egg-info/requires.txt 2018-08-02 15:22:42.000000000 +0200 @@ -0,0 +1 @@ +urllib3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selenium-3.13.0/setup.py new/selenium-3.14.0/setup.py --- old/selenium-3.13.0/setup.py 2018-06-25 21:46:55.000000000 +0200 +++ new/selenium-3.14.0/setup.py 2018-08-02 15:18:17.000000000 +0200 @@ -29,7 +29,7 @@ setup_args = { 'cmdclass': {'install': install}, 'name': 'selenium', - 'version': "3.13.0", + 'version': "3.14.0", 'license': 'Apache 2.0', 'description': 'Python bindings for Selenium', 'long_description': open(join(abspath(dirname(__file__)), "README.rst")).read(), @@ -67,16 +67,12 @@ 'selenium.webdriver.phantomjs', 'selenium.webdriver.remote', 'selenium.webdriver.support', ], - 'package_data': { - 'selenium.webdriver.firefox': ['*.xpi', 'webdriver_prefs.json'], - 'selenium.webdriver.remote': ['getAttribute.js', 'isDisplayed.js'], - }, - 'data_files': [('selenium/webdriver/firefox/x86', ['selenium/webdriver/firefox/x86/x_ignore_nofocus.so']), - ('selenium/webdriver/firefox/amd64', ['selenium/webdriver/firefox/amd64/x_ignore_nofocus.so']), - ('selenium/webdriver/remote', ['selenium/webdriver/remote/getAttribute.js']), - ('selenium/webdriver/remote', ['selenium/webdriver/remote/isDisplayed.js'])], 'include_package_data': True, - 'zip_safe': False + 'install_requires': ['urllib3'], + 'zip_safe': False, + 'maintainer':'david.burns', + 'maintainer_email':'david.bu...@theautomatedtester.co.uk' + } setup(**setup_args)