コード例 #1
0
    def _send_answer(remote: Remote, link: str, answer_to_send: str) -> None:
        def wait_textarea(_remote: Remote):
            return _remote.find_element_by_css_selector("textarea.textarea")

        def wait_textarea_enabled(_remote: Remote):
            return _remote.find_element_by_tag_name("textarea").is_enabled()

        def wait_correct(_remote: Remote):
            return _remote.find_element_by_class_name("correct")

        remote.get(link)
        WebDriverWait(remote, 3).until(wait_textarea)

        try:
            remote.find_element_by_class_name("again-btn").click()
            WebDriverWait(remote, 3).until(wait_textarea_enabled)
        except NoSuchElementException:
            pass

        remote.find_element_by_css_selector("textarea.textarea").send_keys(
            answer_to_send)
        remote.find_element_by_class_name("submit-submission").click()

        try:
            WebDriverWait(remote, 3).until(wait_correct)
            expected = "Correct!"
            result = remote.find_element_by_class_name(
                "smart-hints__hint").text
            assert result == expected, f"{expected} != {result}"
        except NoSuchElementException:
            assert False, "No smart-hints__hint element on the page after submission"
コード例 #2
0
    def __check(self, remote: webdriver.Remote):
        first_required = remote.find_element_by_css_selector(
            "div.first_block .form-control.first")
        second_required = remote.find_element_by_css_selector(
            "div.first_block .form-control.second")
        third_required = remote.find_element_by_css_selector(
            "div.first_block .form-control.third")
        required_input = ["Name", "Surname", "*****@*****.**"]

        for input_element, test_input in zip(
            (first_required, second_required, third_required), required_input):
            input_element.send_keys(test_input)

        # Отправляем заполненную форму
        button = remote.find_element_by_css_selector("button.btn")
        button.click()

        # Проверяем, что смогли зарегистрироваться
        # ждем загрузки страницы
        WebDriverWait(remote,
                      3).until(lambda x: x.find_element_by_tag_name("h1"))

        # находим элемент, содержащий текст
        welcome_text_elt = remote.find_element_by_tag_name("h1")
        # записываем в переменную welcome_text текст из элемента welcome_text_elt
        welcome_text = welcome_text_elt.text
        expect = "Поздравляем! Вы успешно зарегистировались!"

        # с помощью assert проверяем, что ожидаемый текст совпадает с текстом на странице сайта
        self.assertEqual(expect, welcome_text,
                         f"{welcome_text} is not {expect}")
コード例 #3
0
def _load_family_urls(driver: Remote, url: str):
    page_url_pattern = url + "?page={}"

    result = []
    page_number = 1
    page_count = 1

    while page_number <= page_count:
        page_url = page_url_pattern.format(page_number)

        driver.get(page_url)

        div_element = driver.find_element_by_css_selector(
            "div.breadcrumb-collection div.breadcrumb_text")
        page_count = int(
            re.match(".*Page \d+ of (?P<page_count>\d+)$",
                     div_element.get_property("innerText"),
                     re.IGNORECASE).group("page_count"))

        a_elements = driver.find_elements_by_css_selector(
            "div.product-list div.product-wrap a.product-info__caption")
        for a_element in a_elements:
            result.append(a_element.get_attribute("href"))

        logger.debug("Loaded %d products family URLs from '%s'",
                     len(a_elements), page_url)

        page_number += 1

    return result
コード例 #4
0
def logoff(driver: Remote) -> None:
    """
    Helper method to logoff a driver.
    """
    # Click on user icon
    driver.find_element_by_css_selector(
        "body > div.header-top-area > div > div > div.col-lg-4.col-md-4.col-sm-12.col-xs-12 > div > ul > li:nth-child(1) > a"
    ).click()
    logoff_selector = "body > div.header-top-area > div > div > div.col-lg-4.col-md-4.col-sm-12.col-xs-12 > div > ul > li.nav-item.dropdown.open > ul > li:nth-child(2) > a"
    WebDriverWait(driver, PAGE_LOAD_TIMEOUT).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, logoff_selector)),
        "Can't locate logoff button")
    # then click on logoff
    driver.find_element_by_css_selector(logoff_selector).click()
    WebDriverWait(driver, PAGE_LOAD_TIMEOUT).until(
        EC.element_to_be_clickable(
            (By.CSS_SELECTOR, "#content > p:nth-child(3) > a")),
        "Can't locate django admin panel 'Log in again' button.")
コード例 #5
0
def login(driver: Remote) -> None:
    """
    Helper method to authenticate a driver.
    """
    # Manually login into Saskatoon
    driver.implicitly_wait(PAGE_LOAD_TIMEOUT)

    # TODO: README.md
    saskatoon_url = os.getenv('SASKATOON_URL')
    saskatoon_email = os.getenv('SASKATOON_ADMIN_EMAIL')
    saskatoon_pass = os.getenv('SASKATOON_ADMIN_PASSWORD')

    assert saskatoon_email is not None
    assert saskatoon_pass is not None

    driver.get(saskatoon_url + "/accounts/login/?next=/")

    # Wait for the login form to show up
    #                                                                           HTML TAG
    WebDriverWait(driver, PAGE_LOAD_TIMEOUT).until(
        EC.element_to_be_clickable(
            (By.CSS_SELECTOR, "#l-login > form > div.nk-form > button")),
        "Can't locate login form")

    # Fill username / password
    driver.find_element_by_id("id_username").send_keys(saskatoon_email)
    driver.find_element_by_id("id_password").send_keys(saskatoon_pass)

    # Click on login button
    time.sleep(0.25)
    driver.find_element_by_css_selector(
        "#l-login > form > div.nk-form > button").click()

    try:
        WebDriverWait(driver, PAGE_LOAD_TIMEOUT).until(
            EC.visibility_of_element_located(
                (By.CLASS_NAME, "main-menu-area")), "Can't locate main menu")
    except Exception as e:
        # We are still at the login page
        if '/accounts/login/' in driver.current_url:
            raise RuntimeError("Login failed") from e
        else:
            raise
コード例 #6
0
class AudioMessagesTest(unittest.TestCase):
    USERS_COUNT = u'3 участника'

    def setUp(self):
        browser = os.environ.get('BROWSER', 'FIREFOX')

        self.driver = Remote(command_executor='http://127.0.0.1:4444/wd/hub',
                             desired_capabilities=getattr(
                                 DesiredCapabilities, browser).copy())

        auth_page = AuthPage(self.driver)  # Auth here
        auth_page.authorize()

        self.message_page = GroupMessagesPage(self.driver)

    def tearDown(self):
        self.driver.quit()

    def test_audiomessage_window_opens(self):
        self.message_page.open()
        self.message_page.messages_menu.get_button_attach()

        self.message_page.messages_menu.get_button_videomessage()

        audio_msg_popup = self.message_page.messages_menu.get_videomessage_popup(
        )
        #проверяем выскочил ли object с флешом
        self.assertIsNotNone(audio_msg_popup)

    def test_audiomessage_play_and_stop_message(self):
        PLAY_STOP_BUTTON = '//div[@class="msg_audio_play"]'
        self.message_page.open()
        last_audio_msg = self.driver.find_element_by_css_selector(
            '.msg_audio:last-child')
        play_button = last_audio_msg.find_element_by_xpath(PLAY_STOP_BUTTON)
        WebDriverWait(
            last_audio_msg, 60,
            0.1).until(lambda d: d.find_element_by_xpath(PLAY_STOP_BUTTON))
        play_button.click()
        # проверяем иконка стоп
        self.assertNotEqual(
            last_audio_msg.get_attribute("class").rfind("st_play"), -1)
        stop_button = last_audio_msg.find_element_by_xpath(PLAY_STOP_BUTTON)
        WebDriverWait(
            last_audio_msg, 60,
            0.1).until(lambda d: d.find_element_by_xpath(PLAY_STOP_BUTTON))
        stop_button.click()
        # проверяем иконка плей
        self.assertNotEqual(
            last_audio_msg.get_attribute("class").rfind("st_stop"), -1)
コード例 #7
0
def click(remote: webdriver.Remote, s):
    remote.find_element_by_css_selector(s).click()
コード例 #8
0
def send(remote: webdriver.Remote, s, keys):
    remote.find_element_by_css_selector(s).send_keys(keys)
コード例 #9
0
ファイル: lesson2_3_5.py プロジェクト: lion0k/stepik_selenuim
def get_text(remote: webdriver.Remote, s):
    return remote.find_element_by_css_selector(s).text
コード例 #10
0
 def wait_textarea(remote: Remote):
     return remote.find_element_by_css_selector("textarea.textarea")
コード例 #11
0
ファイル: tests.py プロジェクト: santiycr/django
class AdminSeleniumWebDriverTestCase(LiveServerTestCase):

    available_apps = [
        "django.contrib.admin",
        "django.contrib.auth",
        "django.contrib.contenttypes",
        "django.contrib.sessions",
        "django.contrib.sites",
    ]

    def _get_remote_capabilities(self, specs):
        platforms = {
            "s": "Windows 2008",
            "x": "Windows 2003",
            "e": "Windows 2012",
            "l": "Linux",
            "m": "Mac 10.6",
            "i": "Mac 10.8",
        }
        browsers = {
            "ff": "firefox",
            "op": "opera",
            "ie": "internet explorer",
            "sa": "safari",
            "ip": "ipad",
            "ih": "iphone",
            "an": "android",
            "gc": "chrome",
        }
        browser = browsers[specs[:2]]
        if specs[-1] in platforms:
            platform = platforms.get(specs[-1])
            version = specs[2:-1]
        else:
            platform = None
            version = specs[2:]
        caps = {"browserName": browser, "version": version, "platform": platform, "public": "public"}
        if "BUILD_NUMBER" in os.environ:
            caps["build"] = os.environ["BUILD_NUMBER"]
        elif "TRAVIS_BUILD_NUMBER" in os.environ:
            caps["build"] = os.environ["TRAVIS_BUILD_NUMBER"]
        return caps

    def _get_local_webdriver_class(self, specs):
        browsers = {
            "ff": "selenium.webdriver.Firefox",
            "op": "selenium.webdriver.Opera",
            "ie": "selenium.webdriver.Ie",
            "gc": "selenium.webdriver.Chrome",
        }
        return import_by_path(browsers[specs[:2]])

    def setUp(self):
        test_method = getattr(self, self._testMethodName)
        if not hasattr(test_method, "spec"):
            raise SkipTest("Please make sure your test class is decorated with @browserize")
        elif not test_method.spec:
            raise SkipTest("Selenium tests not requested")
        try:
            selenium_specs = test_method.spec
            if os.environ.get("DJANGO_SELENIUM_REMOTE", False):
                webdriver_class = import_by_path("selenium.webdriver.Remote")
            else:
                webdriver_class = self._get_local_webdriver_class(selenium_specs)
        except Exception as e:
            raise SkipTest(
                'Selenium specifications "%s" not valid or '
                "corresponding WebDriver not installed: %s" % (selenium_specs, str(e))
            )

        from selenium.webdriver import Remote

        if webdriver_class is Remote:
            if not (os.environ.get("REMOTE_USER") and os.environ.get("REMOTE_KEY")):
                raise self.failureException(
                    "Both REMOTE_USER and REMOTE_KEY environment variables are required for remote tests."
                )
            capabilities = self._get_remote_capabilities(selenium_specs)
            capabilities["name"] = self.id()
            auth = "%(REMOTE_USER)s:%(REMOTE_KEY)s" % os.environ
            hub = os.environ.get("REMOTE_HUB", "ondemand.saucelabs.com:80")
            self.selenium = Remote(
                command_executor="http://%s@%s/wd/hub" % (auth, hub), desired_capabilities=capabilities
            )
        else:
            self.selenium = webdriver_class()

        super(AdminSeleniumWebDriverTestCase, self).setUp()

    def tearDown(self):
        if hasattr(self, "selenium"):
            from selenium.webdriver import Remote

            if isinstance(self.selenium, Remote):
                self._report_sauce_pass_fail()
            self.selenium.quit()
        super(AdminSeleniumWebDriverTestCase, self).tearDown()

    def _report_sauce_pass_fail(self):
        # Sauce Labs has no way of knowing if the test passed or failed, so we
        # let it know.
        base64string = base64.encodestring("%s:%s" % (os.environ.get("REMOTE_USER"), os.environ.get("REMOTE_KEY")))[:-1]
        result = json.dumps({"passed": sys.exc_info() == (None, None, None)})
        url = "/rest/v1/%s/jobs/%s" % (os.environ.get("REMOTE_USER"), self.selenium.session_id)
        connection = httplib.HTTPConnection("saucelabs.com")
        connection.request("PUT", url, result, headers={"Authorization": "Basic %s" % base64string})
        result = connection.getresponse()
        return result.status == 200

    def wait_until(self, callback, timeout=10):
        """
        Helper function that blocks the execution of the tests until the
        specified callback returns a value that is not falsy. This function can
        be called, for example, after clicking a link or submitting a form.
        See the other public methods that call this function for more details.
        """
        from selenium.webdriver.support.wait import WebDriverWait

        WebDriverWait(self.selenium, timeout).until(callback)

    def wait_loaded_tag(self, tag_name, timeout=10):
        """
        Helper function that blocks until the element with the given tag name
        is found on the page.
        """
        self.wait_until(lambda driver: driver.find_element_by_tag_name(tag_name), timeout)

    def wait_page_loaded(self):
        """
        Block until page has started to load.
        """
        from selenium.common.exceptions import TimeoutException

        try:
            # Wait for the next page to be loaded
            self.wait_loaded_tag("body")
        except TimeoutException:
            # IE7 occasionnally returns an error "Internet Explorer cannot
            # display the webpage" and doesn't load the next page. We just
            # ignore it.
            pass

    def admin_login(self, username, password, login_url="/admin/"):
        """
        Helper function to log into the admin.
        """
        self.selenium.get("%s%s" % (self.live_server_url, login_url))
        username_input = self.selenium.find_element_by_name("username")
        username_input.send_keys(username)
        password_input = self.selenium.find_element_by_name("password")
        password_input.send_keys(password)
        login_text = _("Log in")
        self.selenium.find_element_by_xpath('//input[@value="%s"]' % login_text).click()
        self.wait_page_loaded()

    def get_css_value(self, selector, attribute):
        """
        Helper function that returns the value for the CSS attribute of an
        DOM element specified by the given selector. Uses the jQuery that ships
        with Django.
        """
        return self.selenium.execute_script('return django.jQuery("%s").css("%s")' % (selector, attribute))

    def get_select_option(self, selector, value):
        """
        Returns the <OPTION> with the value `value` inside the <SELECT> widget
        identified by the CSS selector `selector`.
        """
        from selenium.common.exceptions import NoSuchElementException

        options = self.selenium.find_elements_by_css_selector("%s > option" % selector)
        for option in options:
            if option.get_attribute("value") == value:
                return option
        raise NoSuchElementException('Option "%s" not found in "%s"' % (value, selector))

    def assertSelectOptions(self, selector, values):
        """
        Asserts that the <SELECT> widget identified by `selector` has the
        options with the given `values`.
        """
        options = self.selenium.find_elements_by_css_selector("%s > option" % selector)
        actual_values = []
        for option in options:
            actual_values.append(option.get_attribute("value"))
        self.assertEqual(values, actual_values)

    def has_css_class(self, selector, klass):
        """
        Returns True if the element identified by `selector` has the CSS class
        `klass`.
        """
        return self.selenium.find_element_by_css_selector(selector).get_attribute("class").find(klass) != -1