Пример #1
0
 def interactionWithAlerts(self, accept=True):
     alert_element = WebDriverWait(self.driver,
                                   10).until(EC.alert_is_present())
     alert_text = alert_element.text
     print(alert_text)
     if accept is True:
         alert_element.accept()
     else:
         alert_element.dismiss()
Пример #2
0
def search_car():
    current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    search_box_car = driver.find_element_by_id("ip_car")
    search_box_car.send_keys(car_num)
    search_box_car.send_keys(Keys.RETURN)
    try: alert = WebDriverWait(driver, timeout=2).until(EC.alert_is_present())
    except: print("%s: search car success" %(current_time), flush=True)
    else:
        print("%s: search car error, %s" %(current_time, alert.text), flush=True)
        alert.dismiss()
Пример #3
0
def by_alert():
    driver = webdriver.Chrome('C:/WebDriver/bin/chromedriver.exe') 
    driver.get("https://antycaptcha.amberteam.pl:5443/stf/3-8-1?seed=000c0514-8b72-4558-9998-f68d954e84a7")
    driver.find_element(By.ID, "showAlert").click()
    alert = WebDriverWait(driver, 20).until(EC.alert_is_present())
    alert = driver.switch_to.alert
    text = alert.text
    alert.dismiss()
    driver.find_element(By.ID, "alertText").send_keys(text)
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "solution"))).click()
    time.sleep(1)
    result = driver.find_elements(By.CSS_SELECTOR, "code")
    return result[1].text
Пример #4
0
def discount(discount_type):
    # discount type: 1 == 10min, 2 == 30min, 3 == 1hour
    current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    try:
        driver.find_element_by_xpath('//*[@id="dc_items"]/label[%s]/input' %(discount_type)).click()
        driver.find_element_by_id("DC_Active").click()
        alert = WebDriverWait(driver, timeout=2).until(EC.alert_is_present())
    except:
        if discount_type == 3: print("%s: 1 hour discount success" %(current_time), flush=True)
        elif discount_type == 2: print("%s: 30 minute discount success" %(current_time), flush=True)
        elif discount_type == 1: print("%s: 10 minute discount success" %(current_time), flush=True)
    else:
        print("%s: discount error, %s" %(current_time, alert.text), flush=True)
        alert.dismiss()
Пример #5
0
def test_by_alert():
    driver = webdriver.Chrome('C:/WebDriver/bin/chromedriver.exe')
    driver.get("https://antycaptcha.amberteam.pl:5443")
    driver.find_element(By.CSS_SELECTOR,
                        ".row:nth-child(15) .u-full-width").click()
    driver.find_element(By.ID, "showAlert").click()
    alert = WebDriverWait(driver, 20).until(EC.alert_is_present())
    alert = driver.switch_to.alert
    text = alert.text
    alert.dismiss()
    driver.find_element(By.ID, "alertText").send_keys(text)
    WebDriverWait(driver,
                  20).until(EC.element_to_be_clickable(
                      (By.ID, "solution"))).click()
    time.sleep(1)
    result = driver.find_elements(By.CSS_SELECTOR, "code")
    assert "OK. Good answer" in result[1].text
    driver.quit()
Пример #6
0
    def startStep(self):
        start = datetime.datetime.now()

        try:
            self.find_element_list = []
            browser_step_id = self.get('browser_step_id')
            browser_step = self.case.getStep(step_id=browser_step_id)
            driver = browser_step.getDriver()
            command = self.get('command')
            frame = self.get('frame')
            wait = self.get('wait')
            enter = self.get('auto_enter')
            command_target = self.get('command_target', '').replace("\\", "")
            value = self.get('value')

            if value:
                ref_option = 'Eval | {}'.format(value)
                value = self.applyRefOption(value, ref_option)

            if command == 'Alert':
                try:
                    activity = self.get('activity')
                    #time.sleep(1)
                    #alert = driver.switch_to.alert
                    alert = WebDriverWait(driver,
                                          1).until(EC.alert_is_present())

                    if activity == 'Accept':
                        alert.accept()
                    else:
                        alert.dismiss()
                except NoAlertPresentException:
                    pass
            elif command == 'Switch to Frame':

                self.findElements(driver, command_target)
                self.switchFrame(driver, frame)
            elif command == 'Switch to Default':
                driver.switch_to_default_content()
            else:
                while True:
                    try:
                        WebDriverWait(driver, 0).until(
                            EC.element_to_be_clickable(
                                (By.ID, '___processbar2_i')))
                    except:
                        break

                driver.switch_to.default_content()

                self.findElements(driver, command_target)
                self.find_element_list = sorted(self.find_element_list,
                                                key=lambda k: k['full_frame'],
                                                reverse=True)
                self.switchFrame(driver, frame)

                role = driver.execute_script(
                    "return {}.getAttribute('role')".format(command_target))

                if command in ['Click', 'Type', 'find', 'Grid Click']:
                    target = WebDriverWait(driver, 5).until(
                        EC.element_to_be_clickable((By.ID, command_target)))
                    target_style = driver.execute_script(
                        "return document.getElementById('{id}').getAttribute('style')"
                        .format(id=command_target))
                    driver.execute_script(
                        "document.getElementById('{target}').setAttribute('style', '{add_style}' + 'border: 2px solid red !important; text-shadow: 2px 2px 10px yellow;')"
                        .format(target=command_target, add_style=target_style))
                    #driver.implicitly_wait(1.5)
                    driver.execute_script(
                        "document.getElementById('{target}').setAttribute('style', '{add_style}')"
                        .format(target=command_target, add_style=target_style))

                # Swing Grid를 Access 하기 위한 정보 조회
                if command in ['Grid Type', 'Grid Click', 'Grid Double Click']:
                    row_index = self.get('row_index')
                    col = self.get('column')

                    col_index = driver.execute_script('''
                    var headerList = %s.getDomList("head_tds", "th", %s.getElementById(%s.id + "_head_table"));
                    var arr = Array.prototype.slice.call(headerList)
                    var find_arr = arr.find(event => event.getAttribute('value') !==null && event.getAttribute('value').replace(/ /gi, "").toUpperCase() === %s.replace(/ /gi, "").toUpperCase())
                    var index = -1

                    if (find_arr != null){
                        index = find_arr.getAttribute('colindex')
                    }

                    return index
                    ''' % (command_target, command_target, command_target,
                           '''"{}"'''.format(col)))

                    if type(row_index) == int:
                        pass
                    else:
                        row_index_column = row_index["column"]
                        row_index_value = row_index["value"]
                        column_id = driver.execute_script(
                            "return {target}.getColumnID({col})".format(
                                target=command_target, col=row_index_column))
                        row_index = driver.execute_script(
                            "return {target}.getMatchedIndex('{column_id}', '{value}', true)[0]"
                            .format(target=command_target,
                                    column_id=column_id,
                                    value=row_index_value))

                    if int(col_index) > -1 and row_index:
                        grid_element_id = driver.execute_script('''
                        var headerList = %s.getDomList("body_trs", "tr", %s.getElementById(%s.id + "_body_tbody"));
                        var arr = Array.prototype.slice.call(headerList[%ld].children)
                        var find_arr = arr.find(event => event.getAttribute('colindex')=== %s)
                        var id = ''
                        
                        if (find_arr != null){
                            id = find_arr.getAttribute('id')
                        }
                        
                        return id
                        ''' % (command_target, command_target, command_target,
                               row_index, '''"{}"'''.format(col_index)))
                    else:
                        grid_element_id = '{target}_cell_{row}_{col}'.format(
                            target=command_target, row=row_index, col=col)
                        col_index = col

                if role == "gridcell":
                    command_target = "{}.firstElementChild".format(
                        command_target)

                if command == 'Click':
                    driver.execute_script('{}.click()'.format(command_target))
                elif command == 'Type':
                    #driver.execute_script("document.getElementById('{id}').value='{value}'".format(id=command_target, value=value))
                    driver.execute_script("{id}.setValue('{value}')".format(
                        id=command_target, value=value))
                    if enter:
                        target.send_keys(Keys.ENTER)
                elif command == 'Execute Script':
                    script = self.get('value').replace("\\", "")
                    if script:
                        script = self.getVariableValue(script)

                    driver.execute_script(script)

                elif command == 'Grid Click':
                    try:
                        child_type = driver.execute_script(
                            "return {target}.firstElementChild.getAttribute('type')"
                            .format(target=grid_element_id))

                        if child_type == 'button':
                            driver.execute_script(
                                "{target}.firstElementChild.click()".format(
                                    target=grid_element_id))
                        else:
                            driver.execute_script('{target}.click()'.format(
                                target=grid_element_id))
                    except:
                        driver.execute_script(
                            '{target}.click()'.format(target=grid_element_id))

                elif command == 'Grid Double Click':
                    cell_dblclick_event_info = driver.execute_script(
                        "return {target}.userEventList.find(event => event.name === 'oncelldblclick')"
                        .format(target=command_target))

                    if cell_dblclick_event_info:
                        cell_dblclick_event = cell_dblclick_event_info[
                            "param"]["handler"]
                        scope_id = driver.execute_script(
                            "return {target}.scope_id".format(
                                target=command_target))

                        if scope_id:
                            cell_dblclick_event = scope_id + '_' + cell_dblclick_event
                            '''
                            Lov 공통 Popup 화면(ZNGMSPOP90040_wframe)의 Double Click 이벤트 ZNGMSPOP90040_wframe_scwin.grdLov_oncelldblclick (row, col) 는
                            입력받은 row, col과 상관없이 현재 체크된 값 (grdLov.getCheckedJSON(0)) 을 Return 하도록 되어있어 Click 이벤트로 Focus 이동 후 Double Click 이벤트를 진행함
                            '''
                            if scope_id == 'ZNGMSPOP90040_wframe':
                                driver.execute_script(
                                    '{target}.click()'.format(
                                        target=grid_element_id))

                        driver.execute_script(
                            'eval({event}({row}, {col}))'.format(
                                event=cell_dblclick_event,
                                row=row_index,
                                col=col_index))
                    else:
                        driver.execute_script(
                            '{target}.click()'.format(target=grid_element_id))

                elif command == 'Grid Type':
                    value = self.get('value')

                    driver.execute_script(
                        '{target}.firstElementChild.click()'.format(
                            target=grid_element_id))

                    if value:
                        set_row = grid_element_id.split('_')[2]
                        set_col = grid_element_id.split('_')[3]

                        driver.execute_script(
                            "ngmf.setGridCellData({target}, {row}, {col}, '{value}')"
                            .format(target=command_target,
                                    row=set_row,
                                    col=set_col,
                                    value=value))

                elif command == 'Combo Click':
                    item_list = driver.execute_script(
                        "return {}.itemArr".format(command_target))
                    index = next(idx for idx, item in enumerate(item_list)
                                 if item['label'] == value)
                    driver.execute_script('{target}_button.click()'.format(
                        target=command_target, index=index))
                    driver.execute_script(
                        '{target}_itemTable_{index}.click()'.format(
                            target=command_target, index=index))
                elif command == 'find':
                    pass
            '''
            Browser Command 수행 후 화면에 Progressbar가 수행중이면 Loop 수행
                - Aleart가 존재하면 Skip
            '''
            try:
                driver.switch_to_alert()
            except NoAlertPresentException:
                driver.switch_to_default_content()

                while True:
                    try:
                        WebDriverWait(driver, 0).until(
                            EC.element_to_be_clickable(
                                (By.ID, '___processbar2_i')))
                    except:
                        break

            self.setStatus(0, '정상적으로 처리가 완료되었습니다.')
        except UnexpectedAlertPresentException:
            self.setStatus(0, '정상적으로 처리가 완료되었습니다.')
        except NoSuchWindowException as e:
            if command == 'Click':
                self.setStatus(0, '정상적으로 처리가 완료되었습니다.')
            else:
                self.setStatus(1, str(e))
        except Exception as e:
            if self.getErrOption() == 'Skip':
                self.setStatus(999, str(e))
            else:
                self.setStatus(1, str(e))
        finally:
            end = datetime.datetime.now()
            time_delta = end - start

            self.info['exec_time'] = str(time_delta)
Пример #7
0
class BasePage():

    def __init__(self, driver, path=None):
        self.url = URL
        # self.driver = webdriver.Chrome()
        self.driver = driver
        self.driver.maximize_window()
        self.load_page(path)
        self.timeout = 15
        self.poll_frequency = 0.2

    def load_page(self, path=None):
        if path == None:
            self.url = None
        elif isinstance(path, str) and path[0] == '/':
            url = self.url + path
            print(url)
        else:
            raise TypeError('path must be a string ,path must be a uri')
        if path != None:
            self.driver.get(url)

    # def by_css(self, css):
    #     locator = (By.CSS_SELECTOR, css)
    #     self.wait_element_visibility_of_element_located(locator)
    #     return self.driver.find_element(*locator)

    def by_xpath(self, xpath, text=None):
        locator = (By.XPATH, xpath)
        self.wait(locator, text)
        return self.driver.find_element(*locator)

    def wait_element_visibility_of_element_located(self, locator):
        WebDriverWait(self.driver, self.timeout, self.poll_frequency).until(
            EC.visibility_of_element_located(locator))

    def wait_text_to_be_present_in_element(self, locator, text):
        WebDriverWait(self.driver, self.timeout, self.poll_frequency).until(
            EC.text_to_be_present_in_element(locator, text))

    def wait_text_to_be_present_in_element_value(self, locator, text):
        WebDriverWait(self.driver, self.timeout, self.poll_frequency).until(
            EC.text_to_be_present_in_element_value(locator, text))

    def by_css(self, css, text=None):
        locator = (By.CSS_SELECTOR, css)
        # self.wait_element_visibility_of_element_located(locator)
        self.wait(locator, text)
        return self.driver.find_element(*locator)

    def wait(self, locator, text=None):
        if text == None:
            self.wait_element_visibility_of_element_located(locator)
        else:
            self.wait_text_to_be_present_in_element(locator, text)

    def switch_to_frame(self, choose_iframe=None, css=None, xpath=None):
        if choose_iframe == 'default':
            return self.driver.switch_to.default_content()
        elif choose_iframe == 'parent':
            return self.driver.switch_to.parent_frame()
        elif css != None and xpath == None:
            locator = (By.CSS_SELECTOR, css)
        elif xpath != None and css == None:
            locator = (By.XPATH, xpath)
        else:
            raise ValueError('参数错误,请传css定位或者xpath,需要指定用什么方式传')
        WebDriverWait(self.driver, self.timeout, self.poll_frequency).until(
            EC.frame_to_be_available_and_switch_to_it(locator))

    def select_by(self, element, by, value):
        if by == 'index':
            s = Select(element).select_by_index(int(value))
        elif by == 'value':
            s = Select(element).select_by_value(value)
        elif by == 'text':
            s = Select(element).select_by_visible_text(value)
        else:
            raise ValueError("Not found %s , You can enter 'index', 'value', 'text'." % by)
        return s

    def switch_to_alert(self):
        self.alert = WebDriverWait(self.driver, self.timeout, self.poll_frequency).until(EC.alert_is_present())

    def alert_text(self):
        return self.alert.text

    def alert_accept(self):
        return self.alert.accept()

    def alert_dismiss(self):
        return self.alert.dismiss()
Пример #8
0
# 수업 목록 table을 얻어옴
table_xpath = '//*[@id="ilbanGangjwaStud"]'
tbody_xpath = table_xpath + '/tbody/'

# HELP 강의실로 이동
goto_classHome = tbody_xpath + '/tr[' + str(
    LECTURE_ORDER) + ']/td[9]/span/input'
goto_classHome = WebDriverWait(driver, SLEEP_TIME).until(
    EC.presence_of_element_located((By.XPATH, goto_classHome)))
goto_classHome.send_keys('\n')

# 연구실 안전교육 이수 알림창 닫기
try:
    alert = WebDriverWait(driver, SLEEP_TIME).until(EC.alert_is_present())
    alert.dismiss()
except:
    # 알림창이 열리지않음 = 이수완료. 성실하시군요
    print 'Alert Skipped.'

# 강의홈 로딩
time.sleep(SLEEP_TIME)
driver.switch_to_window(driver.window_handles[1])

# 좌측 강의 버튼 누르기
goto_lecturePage = WebDriverWait(driver, SLEEP_TIME).until(
    EC.presence_of_element_located((By.XPATH, '//li[1]/span/a')))
goto_lecturePage.send_keys('\n')

for page_count in range(1, LECTUREROOM_PAGE + 1):
Пример #9
0
    def test_conditions(self):
        self.login('xxx', 'xxx')

        # 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0
        # WebDriverWait(driver, time).until(EC.visibility_of_element_located(locator)
        # locator:一组,(by, locator)
        e_xpath = '//*[@id="pl_content_account"]/div[1]/form/fieldset/div'
        edit_button = WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located((By.XPATH, e_xpath)))
        edit_button.click()

        # 判断某个元素中是否可见并且是enable的,以便确定元素是可点击的。此方法返回定位到的元素
        # WebDriverWait(driver, time).until(EC.element_to_be_clickable(locator))
        # locator:一组(by, locator)
        hm_xpath = '//*[@id="pl_content_account"]/div[1]/div[2]/div/div[8]/div[3]/div/select/option[3]'
        print(self.driver.find_element_by_xpath(hm_xpath).is_displayed())
        print(self.driver.find_element_by_xpath(hm_xpath).is_enabled())
        WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.XPATH, hm_xpath))).click()

        # 判断某个元素是否被选中了,一般用在下拉列表:WebDriverWait(driver, time).until(EC.element_to_be_selected(element)
        # element:是个WebElement
        # hm_xpath_other = '//*[@id="pl_content_account"]/div[1]/div[2]/div/div[8]/div[3]/div/select/option[8]'
        subsciption = self.driver.find_element_by_xpath(hm_xpath)
        WebDriverWait(self.driver, 20).until(EC.element_to_be_selected(subsciption))

        # 判断是否至少有1个元素存在于dom树中
        # 举个例子,如果页面上有n个元素的class都是‘column-md-3‘,那么只要有1个元素存在,这个方法就返回True
        # WebDriverWait(driver, time).until(EC.presence_of_all_elements_located(locator))
        # locator:一组(by, locator)
        WebDriverWait(self.driver, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'btns')))

        self.driver.find_element_by_xpath(e_xpath).click()

        # 判断某个元素是否被加到了dom树里,并不代表该元素一定可见
        # WebDriverWait(driver, time).until(EC.presence_of_element_located(locator))
        # locator:一组(by, locator)
        WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, 'woman_radio')))
        WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located((By.ID, 'woman_radio')))
        WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.ID, 'woman_radio'))).click()
        woman_radio = self.driver.find_element_by_id('woman_radio')
        WebDriverWait(self.driver, 10).until(EC.element_to_be_selected(woman_radio))

        # 判断某个元素中的text是否 包含 了预期的字符串
        # WebDriverWait(driver, time).until(EC.text_to_be_present_in_element(locator, text))
        # locator:一组(by, locator),即定位方法
        # text:期望的值
        locator = (By.XPATH, '//*[@id="pl_content_account"]/div[1]/div[1]/div[2]/div[2]')
        text = '笙囚'
        print(EC.text_to_be_present_in_element(locator, text))
        WebDriverWait(self.driver, 10).until(EC.text_to_be_present_in_element(locator, text))

        # 判断当前页面的title是否包含预期字符串,返回布尔值
        # WebDriverWait(driver, time).until(EC.title_contains(title))
        # title:期望的模糊title
        print(EC.title_contains('个人资料'))
        WebDriverWait(self.driver, 10).until(EC.title_contains('个人资料'))

        # 判断当前页面的title是否完全等于(==)预期字符串,返回布尔值
        # WebDriverWait(driver, 10).until(EC.title_is(title))
        # title:期望的精确title
        print(EC.title_is('个人资料页个人信息'))
        WebDriverWait(self.driver, 10).until(EC.title_is('个人资料页个人信息'))

        # 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0
        # WebDriverWait(driver, 10).until(EC.visibility_of(element)
        # element:是个WebElement
        visibility_element = self.driver.find_element_by_id('pl_content_account')
        print(EC.visibility_of(visibility_element))
        WebDriverWait(self.driver, 10).until(EC.visibility_of(visibility_element))

        # 判断某个元素中是否不存在于dom树或不可见
        # WebDriverWait(driver,10).until(EC.invisibility_of_element_located(locator)
        # locator:一组(by, locator)
        print(EC.invisibility_of_element_located((By.ID, 'btns')))
        WebDriverWait(self.driver, 10).until(EC.invisibility_of_element_located((By.ID, 'btns')))

        # 判断页面上是否存在alert
        # WebDriverWait(driver, 10).until(EC.alert_is_present())
        self.driver.get('file:///' + os.path.abspath('alert_prompt.html'))
        self.driver.find_element_by_xpath('/html/body/button').click()
        alert = WebDriverWait(self.driver, 10).until(EC.alert_is_present())
        print(alert.text)
        alert.dismiss()