zoukankan      html  css  js  c++  java
  • Pythonselenium

    seleniu 一点常用的操作

    import random
    import time
    from datetime import datetime
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.remote.webdriver import WebElement
    
    
    def easyui_date_select():
        # easyui日期控件操作
        browser = webdriver.Chrome()
        url = ''
        browser.get(url)
        # 日期选择小图标
        try:
            combo_arrow = browser.find_element_by_xpath(
                '//span[contains(@class, "combo-arrow")]'
            )
        except Exception as e:
            print('没有找到日期控件')
            return False
        combo_arrow.click()
        today = datetime.today()
        target_date = datetime.strptime('2021-11-11', '%Y-%m-%d')  #
        gap_y = today.year - target_date.year
        gap_m = today.month - target_date.month
        if gap_y != 0:
            # 切换年
            y_tag = 'calendar-prevyear' if gap_y > 0 else 'calendar-nextyear'
            gap_y = abs(gap_y)
            while gap_y > 0:
                y_btn = WebDriverWait(browser, 10).until(
                    EC.presence_of_element_located(
                        (By.XPATH, f'//div[contains(@class,"{y_tag}")]')
                    )
                )
                if y_btn is None:
                    print('没有找到年份前进或后退按钮')
                    return False
                y_btn.click()
                gap_y -= 1
                time.sleep(0.5)
        if gap_m != 0:
            # 切换月
            m_tag = 'calendar-prevmonth' if gap_m > 0 else 'calendar-nextmonth'
            gap_m = abs(gap_m)
            while gap_m > 0:
                y_btn = WebDriverWait(browser, 10).until(
                    EC.presence_of_element_located(
                        (By.XPATH, f'//div[contains(@class,"{m_tag}")]')
                    )
                )
                if y_btn is None:
                    print('没有找到月份前进或后退按钮')
                    return False
                y_btn.click()
                gap_m -= 1
                time.sleep(0.5)
        # 选择目标日期并点击
        date_element = WebDriverWait(browser, 10).until(
            EC.presence_of_element_located(
                (By.XPATH, f'//td[@abbr="{target_date.year},{target_date.month},{target_date.day}"]',)
            )
        )
        target_date_str = target_date.strftime('%Y-%m-%d')
        if date_element is None:
            print(f'没有找到日期{target_date_str}')
            return False
        date_element.click()
        time.sleep(10)
        browser.quit()
        return True
    
    
    def key_operator():
        browser = webdriver.Chrome()
        url = ''
        browser.get(url)
        element = WebDriverWait(browser, 10).until(
            EC.presence_of_element_located(
                (By.XPATH, '//element_xpath',)
            )
        )
        element_list = WebDriverWait(browser, 10).until(
            EC.presence_of_all_elements_located(
                (By.XPATH, '//element_xpath',)
            )
        )
        element = WebElement(element)  # 可以不用,这里主要是方便后面写代码自动提示 :·)
        element.clear()
        element.send_keys('xxx')
        element.click()  # 点击
        ActionChains(browser).move_to_element(elememt).click().perform()  # 点击
        browser.execute_script('arguments[0].click()', element)  # 点击
        element.is_displayed()  # 判断是否可见
        element.screenshot(f'./img/{time.time()}.png')  # 保存到图片文件
        element_png = element.screenshot_as_png  # 图片二进制数据
        element_base64 = element.screenshot_as_base64  # 图片二进制数据Base64编码后数据
        element_text = element.text  # 文本信息
        element_attr_value = element.get_attribute('value')
        element.find_element_by_xpath('xpath')
        element.find_element(By.XPATH, 'xpath')
        element.find_elements_by_xpath('xpath')
        element.find_elements(By.XPATH, 'xpath')
        element_size = element.size
        element_location = element.location
        # 执行js脚本
        browser.execute_script('arguments[0].value="xxx"', element)
        browser.execute_script('javascript')
        # 使用Action 定位element并滑动element
        action = webdriver.ActionChains(browser)
        random_x = random.choice(range(0, element_size.get('width', 1)))
        random_y = random.choice(range(0, element_size.get('height', 1)))
        print('element: ', element_size, element_location, random_x, random_y)
        # move_to_element 此名称开头的方法都是将鼠标移动到对应的元素上,而不是页面滚动到对应的元素
        # action.move_to_element(element)
        # 页面滚动到一个元素可以用js
        # browser.execute_script("arguments[0].scrollIntoView();", elemnet)
        action.move_to_element_with_offset(element, random_x, random_y)
        action.click_and_hold(element)
        move_distance = 100
        action.move_by_offset(move_distance, 0)
        action.release().perform()
        # Select
        element_select = browser.find_element_by_xpath('select xpath')
        selector = Select(element_select)
        selector.select_by_index(index)
        selector.select_by_value('value')
        selector.select_by_visible_text('text')
        # 一般的日期控件修改
        js = f'document.getElementById({id}).removeAttribute("readonly");'
        # 或者
        js = f'document.getElementsByName({name})[0].removeAttribute("readonly");'
        browser.execute_script(js)
        js = f'document.getElementById({id}).value="{value}"'
        # 或者
        js = f'document.getElementsByName({name})[0].value="{value}"'
        browser.execute_script(js)
        # 或者
        elememt = browser.find_element_by_id('id')
        # 或者
        element = browser.find_element_by_name('name')
        browser.execute_script('arguments[0].removeAttribute("readonly")', element)
        browser.execute_script(f'arguments[0].value="{value}"', element)
        # 有可能要先通过js把日期值置空,然后通过send_keys('日期')进行日期赋值
        element.send_keys('日期')
        elememt.send_keys(keys.TAB)
  • 相关阅读:
    jmeter压测学习8-压测带token的接口
    jmeter压测学习7-登录参数化(CSV 数据文件设置)
    jmeter压测学习6-HTTP Cookie管理器
    jmeter压测学习5-XPath提取器
    jmeter压测学习4-正则表达式提取
    jmeter压测学习3-提取json数据里面的token参数关联
    docker学习11-上传本地镜像到镜像仓库
    docker学习10-注册docker hub账号
    python测试开发django-73.django视图 CBV 和 FBV
    The user operation is waiting for "Building workspace" to complete
  • 原文地址:https://www.cnblogs.com/yarightok/p/15820872.html
Copyright © 2011-2022 走看看