コード例 #1
0
def test_default_state(browser: webdriver.Remote):
    browser.get('https://the-internet.herokuapp.com/checkboxes')

    first_checkbox = browser.find_element_by_xpath('//input[1]')
    second_checkbox = browser.find_element_by_xpath('//input[2]')
    assert not first_checkbox.is_selected()
    assert second_checkbox.is_selected()
コード例 #2
0
def test_state_after_checked(browser: webdriver.Remote):
    browser.get('https://the-internet.herokuapp.com/checkboxes')

    first_checkbox = browser.find_element_by_xpath(
        '//input[@type="checkbox"][1]')
    second_checkbox = browser.find_element_by_xpath(
        '//input[@type="checkbox"][2]')
    first_checkbox.click()
    second_checkbox.click()
    assert first_checkbox.is_selected()
    assert not second_checkbox.is_selected()
コード例 #3
0
    def get_sso_session(
            self,
            selenium: webdriver.Remote,
            impersonate_user=settings.TEST_IMPERSONATE_USER
    ) -> webdriver.Remote:

        cookies = self.keycloak.impersonate(impersonate_user).cookies
        # Note(knikolla): We must open a page in order to set cookies.
        # Doesn't have to exist, but must be in same domain as SSO.
        selenium.get(f'{settings.KEYCLOAK_URL}/auth/test')
        for k in [x for x in cookies.keys() if 'KEYCLOAK' in x]:
            selenium.add_cookie({
                'name':
                k,
                'value':
                cookies[k],
                'domain':
                parse.urlparse(settings.KEYCLOAK_URL).netloc.split(':')[0],
            })

        selenium.get(f'{settings.KEYCLOAK_URL}/auth/realms/master/account/')

        selenium.implicitly_wait(5)
        username = selenium.find_element_by_xpath('//*[@id="username"]')
        assert username.get_attribute('value') == impersonate_user
        return selenium
コード例 #4
0
def test_removing(browser: webdriver.Remote):
    browser.get('https://the-internet.herokuapp.com/add_remove_elements/')
    btn_add = browser.find_element_by_xpath('//button[text()="Add Element"]')
    max_add = random.randint(2, 15)
    print(f"will add button for {max_add} times ")
    for x in range(0, max_add):
        btn_add.click()
        time.sleep(
            0.1
        )  # make little bit visible ahaha :D believe me you wont see it, try to remark

    btns_delete = browser.find_elements_by_css_selector('#elements button')
    print('total btns_delete: ', len(btns_delete))
    print(btns_delete)

    for btn_delete in btns_delete:
        btn_delete.click()
        time.sleep(
            0.1
        )  # make little bit visible ahaha :D believe me you wont see it, try to remark

    # before getting not found items, we should reduce implicit time to make selenium wait shorter
    browser.implicitly_wait(1)
    btns_delete = browser.find_elements_by_css_selector('#elements button')
    assert len(btns_delete) == 0
コード例 #5
0
def login_succeed(ip, browser):
    driver = Remote(command_executor=ip,
                    desired_capabilities={'platform': 'ANY',
                                          'browserName': browser,
                                          'version': '',
                                          'javascriptEnabled': True,
                                          })
    url = "http://192.168.117.9:8080/jforum/forums/list.page"
    driver.get(url)

    try:
        driver.find_element_by_name('username').send_keys('admin')
        driver.find_element_by_name('password').send_keys('admin')
        driver.find_element_by_name('login').click()

        request = driver.find_element(By.ID, 'myprofile').text
        print(request)

        find_digit = driver.find_element_by_xpath("//table[@cellpadding='2']/tbody/tr[4]/td[4]").text
        print(find_digit)

        """截图"""
        driver.save_screenshot(filename='loginSucceed.png')


    except NoSuchElementException as e:
        print(e)

    finally:
        sleep(2)
        driver.quit()
コード例 #6
0
def test_adding(browser: webdriver.Remote):
    browser.get('https://the-internet.herokuapp.com/add_remove_elements/')
    btn_add = browser.find_element_by_xpath('//button[text()="Add Element"]')

    # Check default state
    browser.implicitly_wait(
        0.3
    )  # before getting not found items, we should reduce implicit time to make selenium wait shorter
    btns_delete = browser.find_elements_by_css_selector('#elements button')
    assert len(btns_delete) == 0

    browser.implicitly_wait(5)  # restore it
    btn_add.click()
    btns_delete = browser.find_elements_by_css_selector('#elements button')
    assert len(btns_delete) > 0
コード例 #7
0
ファイル: rest_tags.py プロジェクト: pycnick/homework-4
class ManageRestaurantTagsTest(unittest.TestCase):
    LOGIN = os.environ['ADMIN_LOGIN']
    PASSWORD = os.environ['ADMIN_PASSWORD']

    ADDRESS = 'Россия, Москва, 2-я Бауманская улица, 5с1'
    LONGITUDE = 55.765985
    LATITUDE = 37.68456

    TAG_NAME = ('Test Tag%s' % time.asctime()).replace(' ', '')

    MAIN_URL = 'http://skydelivery.site/restaurant_list/1'
    REST_ELEMENT = '//div[contains(@class, "restaurant-list__restaurant-{}")]'
    REST_LIST = '//div[@id="restaurant-list"]'
    REST_NAME = './/span[@class="restaurant__name"]'

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

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

        AddressPage(self.driver).open()
        storage = LocalStorage(self.driver)

        storage.set('deliveryGeo', self.ADDRESS)
        storage.set('longitude', self.LONGITUDE)
        storage.set('latitude', self.LATITUDE)

        self.driver.refresh()
        self.driver.maximize_window()

        main_page = MainPage(self.driver)
        main_page.wait_visible()

        main_page.auth(self.LOGIN, self.PASSWORD)

        self.filler = DatabaseFiller()
        self.filler.admin_auth()
        self.filler.create_test_restaurants(1)

        self.filler.create_tag(self.TAG_NAME)
        self.tag_id = self.filler.get_tag_by_name(self.TAG_NAME)

        self.rest_id = self.filler.get_restaurant_id_by_name(
            self.filler.TEST_REST_NAME.format(0))
        self.rest_list_page = AdminRestaurantsPage(self.driver)

        self.rest_list_page.open()
        self.rest_list_page.wait_visible()

        self.rest_list_page.open_manage_tags(self.rest_id)
        self.form = self.rest_list_page.manage_tags_form
        self.form.wait_visible()

    def tearDown(self):
        self.filler.delete_all_rests()
        self.filler.delete_tag(self.TAG_NAME)
        self.driver.quit()

    def testAddTagToRestaurant(self):
        self.form.set_tag(self.tag_id)
        self.form.submit()

        self.form.wait_visible()
        WebDriverWait(self.driver, 5,
                      0.1).until(lambda d: self.form.message() != '')

        self.assertEqual(self.form.message(), 'Теги успешно изменены')

        main_page = MainPage(self.driver)
        main_page.open()

        main_form = main_page.main_form
        main_form.wait_open()
        main_form.set_tag(self.tag_id)

        WebDriverWait(self.driver, 5,
                      0.3).until(lambda d: d.current_url == self.MAIN_URL)

        main_page.wait_visible()
        WebDriverWait(
            self.driver, 5, 0.3).until(lambda d: d.find_element_by_xpath(
                self.REST_LIST).find_element_by_xpath(
                    self.REST_ELEMENT.format(self.rest_id)).is_displayed())
        rest_el = self.driver.find_element_by_xpath(
            self.REST_LIST).find_element_by_xpath(
                self.REST_ELEMENT.format(self.rest_id))
        self.assertEqual(
            rest_el.find_element_by_xpath(self.REST_NAME).text,
            self.filler.TEST_REST_NAME.format(0))

    def testDeleteTagFromRestaurant(self):
        self.filler.add_tag_to_restaurant(self.TAG_NAME,
                                          self.filler.TEST_REST_NAME.format(0))

        self.driver.refresh()

        self.form.wait_visible()
        self.form.unset_tag(self.tag_id)
        self.form.submit()

        WebDriverWait(self.driver, 5,
                      0.1).until(lambda d: self.form.message() != '')

        self.assertEqual(self.form.message(), 'Теги успешно изменены')

        main_page = MainPage(self.driver)
        main_page.open()

        main_form = main_page.main_form
        main_form.wait_open()
        main_form.set_tag(self.tag_id)

        WebDriverWait(self.driver, 5,
                      0.1).until(lambda d: d.current_url == self.MAIN_URL)

        self.driver.refresh()

        main_page.wait_visible()
        self.assertEqual(
            self.driver.find_element_by_xpath(self.REST_LIST).text,
            'К сожалению, мы пока не доставляем в ваш район 🙁')
コード例 #8
0
def attach(sid, url):
    driver = Remote(command_executor=url, desired_capabilities={})
    driver.session_id = sid
    driver.find_element_by_xpath("//input[contains(@value, 'Lucky')]").click()
コード例 #9
0
class AddProductTest(unittest.TestCase):
    LOGIN = os.environ['ADMIN_LOGIN']
    PASSWORD = os.environ['ADMIN_PASSWORD']

    ADDRESS = 'Россия, Москва, 2-я Бауманская улица, 5с1'
    LONGITUDE = 55.765985
    LATITUDE = 37.68456

    TITLE = "Test product"
    TITLE_MAX_SIZE = 80
    TITLE_MIN_SIZE = 4
    UNVALID_SHORT_TITLE = ''.join(['a' for i in range(TITLE_MIN_SIZE - 1)])
    UNVALID_LONG_TITLE = ''.join(['a' for i in range(TITLE_MAX_SIZE + 1)])

    PRICE = 100
    UNVALID_PRICE_NEGATIVE = -10
    UNVALID_PRICE_MAX = 10001
    UNVALID_PRICE_STRING = '{}string'.format(PRICE)

    PHOTO = 'data/test_rest_photo.jpg'
    NON_PHOTO = 'data/test_non_photo_file'
    BIG_PHOTO = 'data/test_big_photo.jpg'

    URL_FORM = 'http://skydelivery.site/admin/restaurants/{}/add/product'
    URL_RESTAURANT = 'http://skydelivery.site/restaurants/{}'

    PRODUCT_LIST = '//div[@class="restaurant-view__product-list"]'
    PRODUCT_CARD = '//div[@class="product-card__container"]'
    PRODUCT_CARD_TITLE = '//span[@class="product-card__name"]'
    PRODUCT_CARD_PRICE = '//span[@class="product-card__description"]'

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

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

        AddressPage(self.driver).open()
        storage = LocalStorage(self.driver)

        storage.set('deliveryGeo', self.ADDRESS)
        storage.set('longitude', self.LONGITUDE)
        storage.set('latitude', self.LATITUDE)

        self.driver.refresh()
        self.driver.maximize_window()

        main_page = MainPage(self.driver)
        main_page.wait_visible()

        main_page.auth(self.LOGIN, self.PASSWORD)

        self.filler = DatabaseFiller()
        self.filler.admin_auth()
        self.filler.create_test_restaurants(1)

        self.rest_id = self.filler.get_restaurant_id_by_name(
            self.filler.TEST_REST_NAME.format(0))
        self.rest_list_page = AdminRestaurantsPage(self.driver)

        self.rest_list_page.open()
        self.rest_list_page.wait_visible()

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

    def testUnvlaidTitle(self):
        url_form = self.URL_FORM.format(self.rest_id)
        self.rest_list_page.add_product(self.rest_id, '', self.PRICE,
                                        self.PHOTO)
        form = self.rest_list_page.add_product_form

        self.assertEqual(self.driver.current_url, url_form)
        self.assertEqual(form.title_error(), 'Обязательное поле')

        form.set_title(self.UNVALID_SHORT_TITLE)
        form.submit()

        self.assertEqual(self.driver.current_url, url_form)
        self.assertEqual(form.title_error(), 'Минимальная длина: 4')

        form.clear_title()
        form.set_title(self.UNVALID_LONG_TITLE)

        self.assertNotEqual(form.title_value(), self.UNVALID_LONG_TITLE)

    def testUnvalidPrice(self):
        url_form = self.URL_FORM.format(self.rest_id)
        self.rest_list_page.add_product(self.rest_id, self.TITLE, '',
                                        self.PHOTO)
        form = self.rest_list_page.add_product_form

        self.assertEqual(self.driver.current_url, url_form)
        self.assertEqual(form.price_error(), 'Обязательное поле')

        form.set_price(self.UNVALID_PRICE_NEGATIVE)
        form.submit()

        self.assertEqual(self.driver.current_url, url_form)
        self.assertEqual(form.price_error(), 'Минимальное значение: 0.1')

        form.clear_price()
        form.set_price(self.UNVALID_PRICE_MAX)
        form.submit()

        self.assertEqual(self.driver.current_url, url_form)
        self.assertEqual(form.price_error(), 'Максимальное значение: 10000')

        form.clear_price()
        form.set_price(self.UNVALID_PRICE_STRING)

        self.assertEqual(form.price_value(), '')

    def testUnvalidBigPhoto(self):
        url_form = self.URL_FORM.format(self.rest_id)
        self.rest_list_page.add_product(self.rest_id, self.TITLE, self.PRICE,
                                        self.BIG_PHOTO)
        form = self.rest_list_page.add_product_form

        self.assertEqual(self.driver.current_url, url_form)
        self.assertEqual(form.photo_error(), 'Максимальный размер файла - 1МБ')

    def testUnvalidPhotoFormat(self):
        url_form = self.URL_FORM.format(self.rest_id)
        self.rest_list_page.add_product(self.rest_id, self.TITLE, self.PRICE,
                                        self.NON_PHOTO)
        form = self.rest_list_page.add_product_form

        self.assertEqual(self.driver.current_url, url_form)
        self.assertEqual(form.photo_error(),
                         'Выберите изображение (.png, .jpg)')

    def testAddProduct(self):
        self.rest_list_page.add_product(self.rest_id, self.TITLE, self.PRICE,
                                        self.PHOTO)

        WebDriverWait(self.driver, 5, 0.1).until(
            lambda d: d.current_url == self.URL_RESTAURANT.format(self.rest_id)
            and d.find_element_by_xpath(self.PRODUCT_LIST).is_displayed(
            ) and d.find_element_by_xpath(self.PRODUCT_CARD).is_displayed())

        card = self.driver.find_element_by_xpath(self.PRODUCT_CARD)

        self.assertEqual(
            card.find_element_by_xpath(self.PRODUCT_CARD_TITLE).text,
            self.TITLE)
        self.assertEqual(
            card.find_element_by_xpath(self.PRODUCT_CARD_PRICE).text,
            '{}₽'.format(self.PRICE))
コード例 #10
0
ファイル: applicant.py プロジェクト: parkun-by/appeal_sender
 def _get_element_by_xpath(self, xpath: str, browser: webdriver.Remote):
     return browser.find_element_by_xpath(xpath)
コード例 #11
0
ファイル: BasePage.py プロジェクト: zhaowen13/ui
class BasePage(object):
    def __init__(self, project_name):
        self.driver = ''
        self.loc = ''
        self.project_name = project_name
        yamlPath = "user.yaml"
        yaml.load(yamlPath, Loader=yaml.BaseLoader)
        yaml.warnings({'YAMLLoadWarning': False})
        f = open(yamlPath, 'r')
        temp = yaml.load(f.read())
        self.url = temp[project_name]['url']
        self.username = temp[project_name]['username']
        self.password = temp[project_name]['password']

    def open(self,
             browser="chrome",
             host='http://localhost:8081/wd/hub'
             ):  # 初始化 打开浏览器 并最大化  self 与java中的this中一样,调用时不用传入self参数
        try:
            self.driver = Remote(command_executor=host,
                                 desired_capabilities={
                                     'platform': 'ANY',
                                     'browserName': browser,
                                     'version': '',
                                     'javascriptEnabled': True
                                 })
            self.driver.maximize_window()
        except Exception as e:
            print(e)

        logger_cls.info(u"打开{0}浏览器".format(browser))
        logger_cls.info(u"最大化")

    def get(self):
        try:
            self.driver.get(self.url)
            self.driver.implicitly_wait(10)  # 隐性等待,最长等10秒
            logger_cls.info(u'打开:{0}'.format(self.url))
        except BaseException:
            logger_cls.error(u'打开{0}失败'.format(self.url))
        self.loc = loc.Analyze(self.project_name)  #初始化,读取xml 赋值给loc

    def find(self, name):  #元素定位,并返回定位好的元素
        try:
            el = WebDriverWait(self.driver, 3,
                               0.5).until(  #设置显示等待时间,每0.5秒检查一次,如果超出指定值就报错
                                   EC.presence_of_element_located(
                                       (self.loc[name].type,
                                        self.loc[name].UIIdentifier)))
            logger_cls.info(u'定位元素:{0}'.format(name))
            # logger_cls.info(loc[name].value)
        except BaseException:
            logger_cls.error(u'定位元素:{0}失败'.format(name))
        return el

    def send_keys(self, name, text):
        try:
            self.find(name).send_keys(text)
            logger_cls.info(u'在:{0}输入{1}'.format(name, text))
            time.sleep(3)
        except BaseException:
            logger_cls.error(u'在:{0}输入{1}失败'.format(name, text))

    def click(self, name):
        try:
            self.find(name).click()
            logger_cls.info(u'点击:{0}'.format(name))
            time.sleep(3)
        except BaseException:
            logger_cls.error(u'点击:{0}失败'.format(name))

    def being(self, name):
        t = False
        try:
            self.driver.find_element_by_xpath(self.loc[name].UIIdentifier)
            t = True
            logger_cls.info(u'{0}元素存在'.format(name))
        except BaseException:
            logger_cls.info(u'{0}元素不存在'.format(name))
        return t

    def login(self):
        self.get()
        self.send_keys(u'用户名', self.username)
        self.send_keys(u'密码', self.password)
        self.click(u'登录')
        time.sleep(3)
        if self.being(u'不再提示'):
            self.click(u'不再提示')
        # self.get_version()

    def clearmonitor(self):
        names = [u'博主', u'博主圈']
        self.click(u'事件')
        if self.being(u'是否有事件'):
            self.focus(u'找回')
            self.click(u'多选')
            self.click(u'全选')
            self.click(u'删除')
        for name in names:
            self.click(name)
            if self.being(u'是否有博主'):
                self.focus(u'找回')
                self.click(u'多选')
                self.click(u'全选')
                self.click(u'删除')

    def randomclick(self, name, div=None):
        text = ''
        i = len(self.driver.find_elements_by_xpath(
            self.loc[name].UIIdentifier))
        logger_cls.info(u'{0}列表中有{1}个参数'.format(name, i))
        y = random.randint(1, i)
        if div == None:
            path = self.loc[name].UIIdentifier + '[' + str(y) + ']'
            text = self.driver.find_element_by_xpath(path).text
            self.driver.find_element_by_xpath(path).click()
            logger_cls.info(u'随机选择列表中的{0}第个参数并点击'.format(y))
        else:
            i2 = len(
                self.driver.find_elements_by_xpath(
                    self.loc[name].UIIdentifier + '[' + str(y) + ']'))
            y2 = random.randint(1, i2)
            path = self.loc[name].UIIdentifier + '[' + str(y2) + ']' + div
            text = self.driver.find_element_by_xpath(path).text
            self.driver.find_element_by_xpath(path).click()
            logger_cls.info(u'随机选择列表中的{0}第个参数并点击'.format(y2))

        logger_cls.info(u'{0}:文本的值为:{1}'.format(name, text))
        time.sleep(3)
        return text

    def close(self):
        logger_cls.info(u'3秒后关闭当前页面')
        time.sleep(3)
        self.driver.close()

    def quit(self):
        logger_cls.info(u'3秒后关闭浏览器')
        time.sleep(3)
        self.driver.quit()

    def get_url(self):
        url = self.driver.current_url
        logger_cls.info(u'当前页面url:' + url)
        return url

    def get_text(self, name):
        text = self.find(name).text
        logger_cls.info(u'{0}文本框的值为:{1}'.format(name, text))
        return text

    def back(self):
        self.driver.back()
        logger_cls.info(u'返回上一页面')

    def clear(self, name):
        self.find(name).clear()
        logger_cls.info(u'清空文本框:{0}'.format(name))

    def get_name(self):
        name = self.driver.name
        logger_cls.info(u'浏览器名称:{0}'.format(name))

    def get_driver(self):
        return self.driver

    def get_version(self):
        version = self.driver.capabilities['version']
        logger_cls.info(u'浏览器版本:{0}'.format(version))
        return version

    def switch_to(self):
        self.driver.switch_to.window(self.driver.window_handles[-1])
        logger_cls.info(u'切换页面')

    def focus(self, name):
        ele = self.find(name)
        ActionChains(self.driver).move_to_element(ele).perform()
        logger_cls.info(u'鼠标悬停到元素:{0}'.format(name))

    def refresh(self):
        self.driver.refresh()
        logger_cls.info(u'刷新页面')

    def title(self):
        title = self.driver.title
        logger_cls.info(u'当前页面标题' + title)
        return title

    def Slide(self, height):
        js = "var q=document.documentElement.scrollTop={0}".format(str(height))
        self.driver.execute_script(js)
        logger_cls.info(u'上下滑动' + str(height))

    def sleep(self, i):
        logger_cls.info(u'暂停{0}秒'.format(i))
        time.sleep(int(i))

    def Screenshot(self, name):
        # name='screenshot_'
        isExists = os.path.exists("../images\\")
        # 判断结果
        if not isExists:
            # 如果不存在则创建目录
            # 创建目录操作函数
            os.makedirs("../images\\")
            print u'创建images目录'
        timestrmap = time.strftime('%Y%m%d_%H%M%S')
        imgPath = os.path.join('../images\\', str(timestrmap) + name + '.png')
        self.driver.save_screenshot(imgPath)
        logger_cls.info(u'截图:{0}{1}.png'.format(str(timestrmap), name))
コード例 #12
0
ファイル: browser.py プロジェクト: ralfeus/order
class Browser:
    __AWAIT_TIMEOUT = 60
    __browser = None
    __browser_kwargs = {}
    __config = {}
    __refs_num = 0

    def get_browser(self):
        return self.__browser

    def __init__(self, headless=True, config={}, **kwargs):
        self.__config = config
        self.__config['SELENIUM_HEADLESS'] = headless
        self.__browser_kwargs = kwargs
        if self.__config.get('SELENIUM_URL'):
            self.__create_browser_session()
        else:
            self.__create_browser_instanse()

    def __del__(self):
        if self.__browser:
            self.__browser.quit()
            logging.debug("%s: Quitted browser at __del__()",
                          self.__config['CELERY_TASK_DEFAULT_QUEUE'])
            del self.__browser

    def __create_browser_instanse(self):
        options = Options()
        if self.__config.get('SELENIUM_HEADLESS'):
            options.headless = True
        if self.__config.get('SELENIUM_BROWSER'):
            options.add_experimental_option("debuggerAddress",
                                            self.__config['SELENIUM_BROWSER'])
        if self.__config.get('SELENIUM_DRIVER'):
            self.__browser_kwargs['executable_path'] = self.__config[
                'SELENIUM_DRIVER']
        if self.__config.get(
                'LOG_LEVEL') and self.__config['LOG_LEVEL'] == logging.DEBUG:
            if self.__config.get('SELENIUM_LOG_PATH'):
                self.__browser_kwargs['service_log_path'] = self.__config[
                    'SELENIUM_LOG_PATH']
            self.__browser_kwargs['service_args'] = ['--verbose']

        if not self.__browser_kwargs.get('executable_path'):
            self.__browser_kwargs['executable_path'] = '/usr/bin/chromedriver'
        self.__browser = Chrome(options=options, **self.__browser_kwargs)
        logging.debug("%s: Created browser instance",
                      self.__config['CELERY_TASK_DEFAULT_QUEUE'])

    def __create_browser_session(self):
        options = Options()
        if self.__config.get('SELENIUM_HEADLESS'):
            options.headless = True
        self.__browser = Remote(command_executor=self.__config['SELENIUM_URL'],
                                options=options)
        logging.debug("Connected to remote browser")

    def __get_by(self, criterium, value):
        ignored_exceptions = (
            NoSuchElementException,
            StaleElementReferenceException,
        )
        try:
            return WebDriverWait(self.__browser,
                                 self.__AWAIT_TIMEOUT,
                                 ignored_exceptions=ignored_exceptions).until(
                                     EC.presence_of_element_located(
                                         (criterium, value)))
        except UnexpectedAlertPresentException as ex:
            raise ex
        except TimeoutException as ex:
            raise NoSuchElementException(
                f"No element with {criterium} {value} was found", ex)

    def click_by_id(self, element_id):
        self.__browser.execute_script(f'$("#{element_id}").click()')

    def doubleclick(self, element):
        ActionChains(self.__browser).double_click(element).perform()

    def execute_script(self, script, *args):
        return self.__browser.execute_script(script, *args)

    def dismiss_alert(self):
        try:
            self.__browser.switch_to_alert().dismiss()
        except NoAlertPresentException:
            pass

    def find_element_by_xpath(self, xpath):
        return self.__browser.find_element_by_xpath(xpath)

    def find_elements_by_xpath(self, xpath):
        return self.__browser.find_elements_by_xpath(xpath)

    def find_elements_by_css_selector(self, css):
        return self.__browser.find_elements_by_css_selector(css)

    def get(self, url):
        exception = None
        for attempt in range(3):
            try:
                self.__browser.get(url)
                exception = None
                break
            except Exception as ex:
                self.quit()
                self.__create_browser_instanse()
                exception = ex
        if exception:
            raise exception

    def get_alert(self):
        try:
            alert = self.__browser.switch_to_alert()
            text = alert.text
            alert.dismiss()
            return text
        except NoAlertPresentException:
            return None

    def get_element_by_class(self, class_name):
        return self.__get_by(By.CLASS_NAME, class_name)

    def get_element_by_css(self, css):
        return self.__get_by(By.CSS_SELECTOR, css)

    def get_element_by_id(self, id):
        return self.__get_by(By.ID, id)

    def get_element_by_name(self, name):
        return self.__get_by(By.NAME, name)

    def switch_to_alert(self):
        return self.__browser.switch_to.alert

    def wait_for_url(self, url):
        try:
            WebDriverWait(self.__browser, 20).until(EC.url_to_be(url))
        except UnexpectedAlertPresentException as ex:
            raise UnexpectedAlertPresentException(ex.alert_text,
                                                  f"Didn't get URL {url}")
        except Exception as ex:
            raise Exception(f"Didn't get URL {url}", ex)

    def close(self):
        self.__browser.get('about:blank')

    def quit(self):
        if self.__browser:
            self.__browser.quit()
            logging.debug("%s: Quitted browser at quit()",
                          self.__config['CELERY_TASK_DEFAULT_QUEUE'])
            del self.__browser

    @property
    def title(self):
        return self.__browser.title
コード例 #13
0
class ExampleTest(unittest.TestCase):
    LOGIN = '******'
    PASSWORD = os.environ['PASSWORD']
    TEXT = 'lalalallalalalalaa'
    TEXT2 = ''

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

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

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

    def test_create_new_post(self):
        main_page = MainPage(self.driver)
        main_page.open()

        auth_form = main_page.form
        auth_form = AuthForm(self.driver)

        auth_form.set_login(self.LOGIN)
        auth_form.set_password(self.PASSWORD)
        auth_form.submit()

        post_page = PostPage(self.driver)
        post_page.open()

        topic_text = post_page.create_post
        topic_text.add_text(self.TEXT)
        topic_text.submit()

    def test_create_empty_topic(self):
        main_page = MainPage(self.driver)
        main_page.open()

        auth_form = main_page.form
        auth_form = AuthForm(self.driver)

        auth_form.set_login(self.LOGIN)
        auth_form.set_password(self.PASSWORD)
        auth_form.submit()

        post_page = PostPage(self.driver)
        post_page.open()

        flag = True
        try:
            self.driver.find_element_by_xpath(Create_Topic.SUBMIT)
        except NoSuchElementException:
            flag = False

        self.assertEquals(flag, False)

    def test_repost_topic(self):
        main_page = MainPage(self.driver)
        main_page.open()

        auth_form = main_page.form
        auth_form = AuthForm(self.driver)

        auth_form.set_login(self.LOGIN)
        auth_form.set_password(self.PASSWORD)
        auth_form.submit()

        feed_page = FeedPage(self.driver)
        feed_page.open()
        feed_page.repost_click()
        feed_page.repost_submit()

        self.driver.refresh()
コード例 #14
0
ファイル: QQ邮箱.py プロジェクト: wslh1993/python_ku

def Unicode():
    val = random.randint(0x4e00, 0x9fbf)
    return chr(val)


dr.get("https://mail.qq.com")
sleep(2)
#进入frame框架内部
dr.switch_to.frame(0)
#通过a链接去定位登录
dr.find_element_by_link_text("帐号密码登录").click()
sleep(1)
#通过xpath用ID去定位用户名框
dr.find_element_by_xpath("//*[@id='u']").send_keys("*****@*****.**")
sleep(1)
#通过xpath用ID去定位密码
dr.find_element_by_xpath("//*[@id='p']").send_keys("liuhe.1015")
sleep(1)
#通过xpath用class去定位登录按钮
dr.find_element_by_xpath("//*[@id='login_button']").click()

sleep(3)
while True:
    s = ''
    while True:
        g = Unicode()
        s = s + g
        if len(s) == 8:
            break
コード例 #15
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