コード例 #1
0
ファイル: mobile.py プロジェクト: zhuxingyue/sweetest
def tab_name(step):
    element = step['element']
    name = step['data']['text']
    # 从所有窗口中查找给定元素,如果查询到就命名,否则报错
    all_handles = g.driver.window_handles
    logger.info('All Handles: %s' % all_handles)

    flag = False
    for handle in all_handles:
        #logger.info('Page Source: %s \n%s' % (handle, g.driver.page_source))
        #logger.info('All Windows: %s' %w.windows)
        if handle not in w.windows.values():
            # 切换至此窗口
            g.driver.switch_to_window(handle)
            try:
                # 成功定位到关键元素
                locating_element(element, 'CLICK')
                # 添加到窗口资源池 g.windows
                w.windows[name] = handle
                # 把当前窗口名字改为新窗口名称
                w.current_window = name
                flag = True
                logger.info('Current Window: %s' % repr(name))
                logger.info('Current Handle: %s' % repr(handle))
            except:
                pass
    if not flag:
        raise Exception(
            'Tab Name failure: the element:%s in all tab is not found' %
            element)
コード例 #2
0
def click(step):
    element = step['element']
    if isinstance(element, str):
        element_location = locating_element(element, 'CLICK')
        if element_location:
            element_location.click()
    elif isinstance(element, list):
        for _e in element:
            element_location = locating_element(_e, 'CLICK')
            element_location.click()
            sleep(0.5)
    sleep(0.5)

    # 获取元素其他属性
    output = step['output']
    for key in output:
        if output[key] == 'text':
            g.var[key] = element_location.text
        elif output[key] in ('text…', 'text...'):
            if element_location.text.endswith('...'):
                g.var[key] = element_location.text[:-3]
            else:
                g.var[key] = element_location.text
        else:
            g.var[key] = element_location.get_attribute(output[key])

    # 判断是否打开了新的窗口,并将新窗口添加到所有窗口列表里
    all_handles = g.driver.window_handles
    for handle in all_handles:
        if handle not in w.windows.values():
            w.register(step, handle)
コード例 #3
0
ファイル: mobile.py プロジェクト: zhangkg/sweetest
def click(step):
    element = step['element']
    if isinstance(element, str):
        element_location = locating_element(element, 'CLICK')
        element_location.click()
    elif isinstance(element, list):
        for _e in element:
            element_location = locating_element(_e, 'CLICK')
            element_location.click()
            sleep(0.5)
    sleep(0.5)

    # 获取元素其他属性
    output = step['output']
    for key in output:
        if output[key] == 'text':
            g.var[key] = element_location.text
        elif output[key] == 'tag_name':
            g.var[key] = element_location.tag_name
        elif output[key] in ('text…', 'text...'):
            if element_location.text.endswith('...'):
                g.var[key] = element_location.text[:-3]
            else:
                g.var[key] = element_location.text
        else:
            g.var[key] = element_location.get_attribute(output[key])
コード例 #4
0
def drag_and_drop(step):
    element = step['element']
    assert isinstance(element, list) and len(
        element) == 2, '元素格式或数量不对,正确格式如:origin_el|destination_el'
    origin = locating_element(element[0])
    destination = locating_element(element[1])
    g.driver.drag_and_drop(origin, destination)
コード例 #5
0
def drag_and_drop(step):
    actions = ActionChains(g.driver)
    element = step['element']
    source = locating_element(element[0])
    target = locating_element(element[1])
    actions.drag_and_drop(source, target)
    actions.perform()
    sleep(0.5)
コード例 #6
0
def click(step):
    element = step['element']
    data = step['data']
    if isinstance(element, str):
        element_location = locating_element(element, 'CLICK')
        if element_location:
            try:
                element_location.click()
            except ElementClickInterceptedException:  # 如果元素为不可点击状态,则等待1秒,再重试一次
                sleep(1)
                if data.get('mode'):
                    g.driver.execute_script("arguments[0].click();",
                                            element_location)
                else:
                    element_location.click()
    elif isinstance(element, list):
        for _e in element:
            element_location = locating_element(_e, 'CLICK')
            try:
                element_location.click()
            except ElementClickInterceptedException:  # 如果元素为不可点击状态,则等待1秒,再重试一次
                sleep(1)
                if data.get('mode'):
                    g.driver.execute_script("arguments[0].click();",
                                            element_location)
                else:
                    element_location.click()
            sleep(0.5)
    sleep(0.5)

    # 获取元素其他属性
    output = step['output']
    for key in output:
        if output[key] == 'text':
            g.var[key] = element_location.text
        elif output[key] in ('text…', 'text...'):
            if element_location.text.endswith('...'):
                g.var[key] = element_location.text[:-3]
            else:
                g.var[key] = element_location.text
        else:
            g.var[key] = element_location.get_attribute(output[key])

    # 判断是否打开了新的窗口,并将新窗口添加到所有窗口列表里
    all_handles = g.driver.window_handles
    for handle in all_handles:
        if handle not in w.windows.values():
            w.register(step, handle)

    return element_location
コード例 #7
0
ファイル: mobile.py プロジェクト: Hanlen520/sweetest
def notcheck(step):
    data = step['data']
    element = step['elements'][0]
    element_location = locating_element(element)

    if e.elements[element]['by'] == 'title':
        assert data['text'] != g.driver.title
コード例 #8
0
def input(step):
    data = step['data']
    element = step['element']
    element_location = locating_element(element)

    element_location.clear()
    element_location.send_keys(data['text'])
コード例 #9
0
def move(step):
    actions = ActionChains(g.driver)
    element = step['element']
    el = locating_element(element)
    actions.move_to_element(el)
    actions.perform()
    sleep(0.5)
コード例 #10
0
ファイル: mobile.py プロジェクト: zhuxingyue/sweetest
def line_unlock(step):
    element = step['element']
    duration = float(step['data'].get('持续时间', 0.3))
    assert isinstance(
        element,
        list) and len(element) > 2, '坐标格式或数量不对,正确格式如:lock_pattern|1|4|7|8|9'
    _e = locating_element(element[0])
    rect = _e.rect
    w = rect['width'] / 6
    h = rect['height'] / 6

    key = {}
    key['1'] = (rect['x'] + 1 * w, rect['y'] + 1 * h)
    key['2'] = (rect['x'] + 3 * w, rect['y'] + 1 * h)
    key['3'] = (rect['x'] + 5 * w, rect['y'] + 1 * h)
    key['4'] = (rect['x'] + 1 * w, rect['y'] + 3 * h)
    key['5'] = (rect['x'] + 3 * w, rect['y'] + 3 * h)
    key['6'] = (rect['x'] + 5 * w, rect['y'] + 3 * h)
    key['7'] = (rect['x'] + 1 * w, rect['y'] + 5 * h)
    key['8'] = (rect['x'] + 3 * w, rect['y'] + 5 * h)
    key['9'] = (rect['x'] + 5 * w, rect['y'] + 5 * h)

    action = TouchAction(g.driver)
    for i in range(1, len(element)):
        k = element[i]
        if i == 1:
            action = action.press(x=key[k][0],
                                  y=key[k][1]).wait(duration * 1000)
        action.move_to(x=key[k][0], y=key[k][1]).wait(duration * 1000)
    action.release().perform()
コード例 #11
0
def double_click(step):
    actions = ActionChains(g.driver)
    element = step['element']
    el = locating_element(element)
    actions.double_click(el)
    actions.perform()
    sleep(0.5)
コード例 #12
0
ファイル: web.py プロジェクト: zzxworks/sweetest
def scroll(step):
    data = step['data']
    x = data.get('x')
    y = data.get('y') or data.get('text')

    element = step['element']
    if element == '':
        # if x is None:
        #     x = '0'
        # g.driver.execute_script(
        #     f"window.scrollTo({x},{y})")
        if y:
            g.driver.execute_script(
                f"document.documentElement.scrollTop={y}")
        if x:
            g.driver.execute_script(
                f"document.documentElement.scrollLeft={x}")         
    else:
        element_location = locating_element(element)

        if y:
            g.driver.execute_script(
                f"arguments[0].scrollTop={y}", element_location)
        if x:
            g.driver.execute_script(
                f"arguments[0].scrollLeft={x}", element_location)               
コード例 #13
0
ファイル: web.py プロジェクト: yhj2013/sweetest
def check(step):
    data = step['data']
    if not data:
        data = step['expected']

    element = step['element']
    element_location = locating_element(element)
    if '#' in element:
        e_name = element.split('#')[0] + '#'
    else:
        e_name = element
    by = e.elements[e_name]['by']
    output = step['output']
    var = {}

    if by in ('title', 'current_url'):
        var[by] = getattr(Common, by)(data, output)

    else:
        for key in data:
            # 预期结果
            expected = data[key]
            # 切片操作处理
            s = re.findall(r'\[.*?\]', key)
            if s:
                s = s[0]
                key = key.replace(s, '')

            if key == 'text':
                real = element_location.text
            else:
                real = element_location.get_attribute(key)
            if s:
                real = eval('real' + s)

            logger.info('DATA:%s' % repr(expected))
            logger.info('REAL:%s' % repr(real))
            try:
                compare(expected, real)
            except:
                raise Exception(
                    f'Check Failure, DATA:{repr(expected)}, REAL:{repr(real)}')

        # 获取元素其他属性
        for key in output:
            if output[key] == 'text':
                var[key] = g.var[key] = element_location.text
            elif output[key] in ('text…', 'text...'):
                if element_location.text.endswith('...'):
                    var[key] = g.var[key] = element_location.text[:-3]
                else:
                    var[key] = g.var[key] = element_location.text
            else:
                var[key] = g.var[key] = element_location.get_attribute(
                    output[key])
    if var:
        step['_output'] += '\n||output=' + str(var)
    return element_location
コード例 #14
0
ファイル: mobile.py プロジェクト: zhuxingyue/sweetest
def tap(step):
    action = TouchAction(g.driver)

    element = step['element']
    if isinstance(element, str):

        if ',' in element:
            position = element.split(',')
            x = int(position[0])
            y = int(position[1])
            position = (x, y)
            g.driver.tap([position])
        else:
            element_location = locating_element(element, 'CLICK')
            action.tap(element_location).perform()
    elif isinstance(element, list):
        if ',' in element[0]:
            for el in element:
                position = el.split(',')
                x = int(position[0])
                y = int(position[1])
                position = (x, y)
                g.driver.tap([position])
                sleep(0.5)
        else:
            for _e in element:
                element_location = locating_element(_e, 'CLICK')
                action.tap(element_location).perform()
                sleep(0.5)
    sleep(0.5)

    # 获取元素其他属性
    output = step['output']
    for key in output:
        if output[key] == 'text':
            g.var[key] = element_location.text
        elif output[key] == 'tag_name':
            g.var[key] = element_location.tag_name
        elif output[key] in ('text…', 'text...'):
            if element_location.text.endswith('...'):
                g.var[key] = element_location.text[:-3]
            else:
                g.var[key] = element_location.text
        else:
            g.var[key] = element_location.get_attribute(output[key])
コード例 #15
0
ファイル: web.py プロジェクト: zzxworks/sweetest
def context_click(step):
    actions = ActionChains(g.driver)
    element = step['element']
    element_location = locating_element(element)
    actions.context_click(element_location)
    actions.perform()
    sleep(0.5)

    return element_location
コード例 #16
0
def hover(step):
    actions = ActionChains(g.driver)
    element = step['element']
    element_location = locating_element(element)
    actions.move_to_element(element_location)
    actions.perform()
    sleep(0.5)

    return element_location
コード例 #17
0
def select(step):
    data = step['data']
    element = step['element']
    element_location = locating_element(element)
    for key in data:
        if key.startswith('index'):
            Select(element_location).select_by_index(data[key])
        elif key.startswith('value'):
            Select(element_location).select_by_value(data[key])
        elif key.startswith('text') or key.startswith('visible_text'):
            Select(element_location).select_by_visible_text(data[key])
コード例 #18
0
def swipe(step):
    actions = ActionChains(g.driver)
    element = step['element']
    data = step['data']

    source = locating_element(element)
    x = data.get('x', 0)
    y = data.get('y', 0)
    actions.drag_and_drop_by_offset(source, x, y)
    actions.perform()
    sleep(0.5)
コード例 #19
0
def set_value(step):
    data = step['data']
    element = step['element']
    element_location = locating_element(element)

    if isinstance(data['text'], tuple):
        element_location.set_value(*data['text'])
    elif element_location:
        if step['data'].get('清除文本', '') == '否' or step['data'].get('clear', '').lower() == 'no':
            pass
        else:
            element_location.clear()
        element_location.set_value(data['text'])
コード例 #20
0
ファイル: mobile.py プロジェクト: zhuxingyue/sweetest
def long_press(step):
    action = TouchAction(g.driver)

    element = step['element']
    duration = step['data'].get('持续时间', 1000)
    if ',' in element or ',' in element:
        position = element.replace(',', ',').split(',')
        x = int(position[0])
        y = int(position[1])
        action.long_press(x=x, y=y, duration=duration).perform()
    else:
        element_location = locating_element(element)
        action.long_press(element_location, duration=duration).perform()
    sleep(0.5)
コード例 #21
0
ファイル: mobile.py プロジェクト: zhuxingyue/sweetest
def click(step):
    element = step['element']
    if isinstance(element, str):
        #element_location = locating_element(element, 'CLICK')
        element_location = locating_element(element)
        try:
            element_location.click()
        except ElementClickInterceptedException:  # 如果元素为不可点击状态,则等待1秒,再重试一次
            sleep(1)
            element_location.click()
    elif isinstance(element, list):
        for _e in element:
            #element_location = locating_element(_e, 'CLICK')
            element_location = locating_element(_e)
            try:
                element_location.click()
            except ElementClickInterceptedException:  # 如果元素为不可点击状态,则等待1秒,再重试一次
                sleep(1)
                element_location.click()
            sleep(0.5)
    sleep(0.5)

    # 获取元素其他属性
    output = step['output']
    for key in output:
        if output[key] == 'text':
            g.var[key] = element_location.text
        elif output[key] == 'tag_name':
            g.var[key] = element_location.tag_name
        elif output[key] in ('text…', 'text...'):
            if element_location.text.endswith('...'):
                g.var[key] = element_location.text[:-3]
            else:
                g.var[key] = element_location.text
        else:
            g.var[key] = element_location.get_attribute(output[key])
コード例 #22
0
def upload(step):
    import win32com.client

    data = step['data']
    element = step['element']
    element_location = locating_element(element)
    file_path = data.get('text', '') or data.get('file', '')

    element_location.click()
    sleep(3)
    shell = win32com.client.Dispatch("WScript.Shell")
    shell.Sendkeys(file_path)
    sleep(2)
    shell.Sendkeys("{ENTER}")
    sleep(2)
コード例 #23
0
def click(step):
    element = step['element']
    element_location = locating_element(element, 'CLICK')
    element_location.click()
    sleep(0.5)

    # 获取元素其他属性
    output = step['output']
    for key in output:
        if output[key] == 'text':
            g.var[key] = element_location.text
        elif output[key] in ('text…', 'text...'):
            if element_location.text.endswith('...'):
                g.var[key] = element_location.text[:-3]
            else:
                g.var[key] = element_location.text
        else:
            g.var[key] = element_location.get_attribute(output[key])
コード例 #24
0
def input(step):
    data = step['data']
    element = step['element']
    element_location = locating_element(element)

    if step['data'].get('清除文本', '') == '否' or step['data'].get(
            'clear', '').lower() == 'no':
        pass
    else:
        element_location.clear()

    for key in data:
        if key.startswith('text'):
            if isinstance(data[key], tuple):
                element_location.send_keys(*data[key])
            elif element_location:
                element_location.send_keys(data[key])
            sleep(0.5)
コード例 #25
0
ファイル: mobile.py プロジェクト: Hanlen520/sweetest
def check(step):
    data = step['data']
    element = step['elements'][0]
    element_location = locating_element(element)
    if '#' in element:
        e_name = element.split('#')[0] + '#'
    else:
        e_name = element
    by = e.elements[e_name]['by']
    output = step['output']

    if by in ('title', 'current_url'):
        getattr(Common, by)(data, output)

    else:
        for key in data:
            if key == 'text':
                logger.info('DATA:%s' % data[key])
                logger.info('REAL: %s' % element_location.text)
                if data[key].startswith('*'):
                    assert data[key][1:] in element_location.text
                else:
                    assert element_location.text == data[key]
            else:
                logger.info('DATA:%s' % data[key])
                logger.info('REAL: %s' % element_location.get_attribute(key))
                if data[key].startswith('*'):
                    assert data[key][1:] in element_location.get_attribute(key)
                else:
                    assert element_location.get_attribute(key) == data[key]
        # 获取元素其他属性
        for key in output:
            if output[key] == 'text':
                g.var[key] = element_location.text
            elif output[key] in ('text…', 'text...'):
                if element_location.text.endswith('...'):
                    g.var[key] = element_location.text[:-3]
                else:
                    g.var[key] = element_location.text
            else:
                g.var[key] = element_location.get_attribute(output[key])
コード例 #26
0
ファイル: windows.py プロジェクト: ComeOn-Wuhan/sweetest
 def switch_frame(self, frame):
     if frame.strip():
         frame = [x.strip() for x in frame.split('|')]
         if frame != self.frame:
             if self.frame != 0:
                 g.driver.switch_to.default_content()
             for f in frame:
                 logger.info('--- Frame Value:  %s' % repr(f))
                 if f.startswith('#'):
                     f = int(f[1:])
                 elif '#' in f:
                     from sweetest.testcase import elements_format
                     from sweetest.locator import locating_element
                     element = elements_format('通用', f)[2]
                     f = locating_element(element)
                 logger.info('--- Switch Frame: %s' % repr(f))
                 g.driver.switch_to.frame(f)
             self.frame = frame
     else:
         if self.frame != 0:
             g.driver.switch_to.default_content()
             self.frame = 0
コード例 #27
0
def upload(step):
    import win32com.client

    data = step['data']
    element = step['element']
    element_location = locating_element(element)
    file_path = data.get('text', '') or data.get('file', '')

    if ':' not in file_path:
        # cur_path=path.abspath(path.dirname(__file__))
        # tem_path=path.dirname(path.dirname(cur_path))
        # file_path=path.join(path.join(tem_path,r'data\import'),file_path)
        file_path = path.abspath(path.join(r'data\import', file_path))

    element_location.click()
    sleep(1)
    shell = win32com.client.Dispatch("WScript.Shell")
    shell.Sendkeys(file_path)
    sleep(1)
    shell.Sendkeys("{ENTER}")
    shell.Sendkeys("{ENTER}")
    sleep(1)
コード例 #28
0
def check(step):
    data = step['data']
    if not data:
        data = step['expected']

    element = step['element']
    element_location = locating_element(element)
    if '#' in element:
        e_name = element.split('#')[0] + '#'
    else:
        e_name = element
    by = e.elements[e_name]['by']
    output = step['output']

    if by in ('title', 'current_url'):
        getattr(Common, by)(data, output)

    else:
        for key in data:
            # 预期结果
            expected = data[key]
            # 切片操作处理
            s = re.findall(r'\[.*?\]', key)
            if s:
                s = s[0]
                key = key.replace(s, '')

            if key == 'text':
                real = element_location.text
            else:
                real = element_location.get_attribute(key)
            if s:
                real = eval('real' + s)

            check(expected, real)
            # logger.info('DATA:%s' % repr(expected))
            # logger.info('REAL:%s' % repr(real))
            # if isinstance(expected, str):
            #     if expected.startswith('*'):
            #         assert expected[1:] in real
            #     else:
            #         assert expected == real
            # elif isinstance(expected, int):
            #     real = str2int(real)
            #     assert real == round(expected)
            # elif isinstance(expected, float):
            #     t, p1 = str2float(real)
            #     d, p2 = str2float(expected)
            #     p = min(p1, p2)
            #     assert round(t, p) == round(d, p)
            # elif expected is None:
            #     assert real == ''

        # 获取元素其他属性
        for key in output:
            if output[key] == 'text':
                g.var[key] = element_location.text
            elif output[key] in ('text…', 'text...'):
                if element_location.text.endswith('...'):
                    g.var[key] = element_location.text[:-3]
                else:
                    g.var[key] = element_location.text
            else:
                g.var[key] = element_location.get_attribute(output[key])
コード例 #29
0
ファイル: mobile.py プロジェクト: zhuxingyue/sweetest
def zoom(step):
    element = step['element']
    element_location = locating_element(element[0])
    percent = step['data'].get('百分比', 200)
    steps = step['data'].get('步长', 50)
    g.driver.zoom(element_location, percent, steps)