计算机系统应用教程网站

网站首页 > 技术文章 正文

Web自动化测试12种特殊场景怎么处理?

btikc 2024-09-27 01:08:22 技术文章 14 ℃ 0 评论

Web自动化测试中有哪些特殊场景,遇到了后我们改怎么处理?下面就给大家说说这十二种特殊场景及其解决方法。更多web自动化测试学习可百度搜素“腾讯课堂特斯汀软件测试”或搜索官方公众号“特斯汀软件测试”

Web自动化测试1十二大特殊场景

场景1:IE浏览器或者其他浏览器,有些点击无效

solution:js点击

ele = self.__find_ele(lo)
if self.br == 'ie':
    self.driver.execute_script('arguments[0].click()', ele)
else:
    ele.click()


拓展:

在console界面,可以使用$x('xpath'),根据xpath找到这个元素

$x('//*[@id="loginform"]/div/div[6]/a')[0].innerText

text,outerText,innerHTML,outerHTML


凡是可以在console界面操作的方法和属性都可以使用driver.execute_script执行


场景2:一个xpath可能对应多个元素

solution1:把所有元素获取为一个列表

eles = driver.find_elements(By.XPATH,'//a[text()="个人信息"]')
eles[1].click()

solution2:通过xpath直接获取第几个(这里下标从1开始)

driver.find_element(By.XPATH,'(//a[text()="个人信息"])[2]').click()


场景3:鼠标移动到元素上面(悬停:hover)

solution:使用selenium提供的鼠标操作类

# 在driver浏览器上面,创建selenium的鼠标操作类的对象
action = ActionChains(driver)
# 把鼠标移动到元素上,perform是使操作生效
action.move_to_element(ele).perform()

场景4:图片上传(批量上传)

solution:<input type="file" 可以直接使用send_keys('文件的绝对路径')

# 单文件上传
driver.find_element(By.XPATH, '//*[@id="filePicker"]/div[2]/input').send_keys(r'C:\Users\Amy\Desktop\will.png')

# 多文件上传
driver.find_element(By.XPATH, '//*[@id="filePicker"]/div[2]/input').send_keys('\n'.join([r'C:\Users\Amy\Desktop\will.png',r'C:\Users\Amy\Desktop\will.png']))

场景5:动态xpath

solution:<input type="file" 可以直接使用send_keys('文件的绝对路径')



场景6:针对select标签的下拉框

solution:关键字封装

    def select(self, lo: str = '', visible_text: str = ""):
        """
        在下拉框里面,根据可见文本选择
        :param lo: 下拉框的定位
        :param visible_text: 如果是数字则select_by_value,字符串则select_by_visible_text
        """
        ele = self.__find_ele(lo)
        select = Select(ele)
        try:
            int(visible_text)
            select.select_by_value(visible_text)
        except:
            select.select_by_visible_text(visible_text)

场景7:关联型xpath

solution:使用轴定位编写xpath

$x('//span[text()="老Will"]/../../li//a[text()="删除"]')

场景8:数据提取

solution:正则提取

s = '订单号:  202203232203535547    |     付款金额(元):  960.00 元'
orderid = re.findall(r'\d{18}',s)
print(orderid)

场景9:断言

solution:判断程序当前执行是否正确

一般来说:

Web自动化没必要断言元素是否存在或者出现

与功能业务相关的时候,比如断言登录的各种情况的结果(需要断言)

每一组用例可能都有不同的断言

场景10:获取属性

solution:获取元素属性

ele = driver.find_element(By.XPATH,'//div[@class="JDJRV-smallimg"]/img')
src = ele.get_attribute('src')

ele = driver.find_element(By.XPATH,'//div[@class="JDJRV-smallimg"]/img')
src = driver.execute_script('return arguments[0].src', ele)


场景11:图文验证码

solution:使用图文识别,详见VIP课程

# 截取验证码图片
ele = driver.find_element(By.XPATH,'//*[@id="verify_code_img"]')
ele.screenshot('../common/verify/verify.png')
verify = Verify('wuqingfqng', '6e8ebd2e301f3d5331e1e230ff3f3ca5', '96001')
# 普通图片解析
v = verify.PostPic(1902, im='../common/verify/verify.png')
print(v)
driver.find_element(By.XPATH, '//*[@id="verify_code"]').send_keys(v)


场景12:滑块验证码破解

solution:使用图片对比和人工智能,详见VIP课程

block = driver.find_element(By.XPATH,'//*[@id="nc_1_n1z"]')
action = ActionChains(driver)
# 按住滑块
action.click_and_hold(block)
# 移动到最右边
action.move_by_offset(400,0)
# 松开鼠标
action.release().perform()
# 重试
while True:

    bj_ele = driver.find_element(By.XPATH,'//div[@class="JDJRV-bigimg"]/img')
    bj_src = bj_ele.get_attribute('src')
    bj_src = bj_src[bj_src.find('base64,')+7:]
    # base64字符串处理为图片
    # base64字符串转为二进制
    imgdata = base64.b64decode(bj_src)
    # 打开一个文件(如果没有就会创建)w: 写入,b: 二进制
    file = open('../common/verify/bj.jpg', 'wb')
    # 写入二进制
    file.write(imgdata)
    # 保存关闭
    file.close()

    block_ele = driver.find_element(By.XPATH,'//div[@class="JDJRV-smallimg"]/img')
    block_src = block_ele.get_attribute('src')
    block_src = block_src[block_src.find('base64,')+7:]
    # base64字符串处理为图片
    # base64字符串转为二进制
    imgdata = base64.b64decode(block_src)
    # 打开一个文件(如果没有就会创建)w: 写入,b: 二进制
    file = open('../common/verify/block.jpg', 'wb')
    # 写入二进制
    file.write(imgdata)
    # 保存关闭
    file.close()

    # 获取缺口位置
    target = '../common/verify/bj.jpg'
    template = '../common/verify/block.jpg'

    # 背景图处理为rgb格式
    target_rgb = cv2.imread(target)
    # 灰度处理
    target_gray = cv2.cvtColor(target_rgb, cv2.COLOR_BGR2GRAY)
    # 缺口图处理为rgb格式
    template_rgb = cv2.imread(template, 0)
    # 在背景图上匹配缺口的位置
    res = cv2.matchTemplate(target_gray, template_rgb, cv2.TM_CCOEFF_NORMED)
    # 返回一个最佳匹配和一个次要匹配
    value = cv2.minMaxLoc(res)
    block_x = int(value[2][0] * 278 / 360 * 1.25)
    print(block_x)

    # 获取滑块的位置
    print(block_ele.location)
    lo = block_ele.location
    lo['x'] = int(lo['x'] * 1.25) + 19
    lo['y'] = int(lo['y'] * 1.25) + 90 + 19

    slide_by_pyautogui(lo.get('x'),lo.get('y'),block_x)
    time.sleep(3)
    # 尝试
    try:
        refresh = driver.find_element(By.XPATH,'//div[@class="JDJRV-img-refresh"]')
        refresh.click()
        time.sleep(1)
    except:
        # 如果代码执行失败
        break

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表