使用Applitools的Appium Eyes时触发非法参数错误求助
问题
我正尝试按照Applitools官方的Ruby版Appium原生移动快速入门示例实现代码,以下是我的代码:
# frozen_string_literal: true require 'eyes_appium' module Raider module VisualHelper attr_reader :eyes APPIUM = Applitools::Appium EYES = APPIUM::Eyes TARGET = APPIUM::Target REGTANGLE_SIZE = Applitools::RectangleSize def create_eyes EYES.new end def check_page(page) page = format_page(page) @eyes.check(page, TARGET.window) end def format_page(page) page.instance_of?(String) ? page : page.to_s end def config(eyes) eyes.api_key = ENV['APPLITOOLS_API_KEY'] end end end
每次运行时,Applitools能成功创建运行任务,识别到正确的视口尺寸和手机设备能力,但执行eyes.check时总是得到空运行结果,并抛出如下错误:
Applitools::EyesError: Request failed: IllegalArgument: size.width must be > 0. Received 0
可能的原因及解决方案
未关联Appium Driver到Eyes实例:你的代码仅创建了EYES实例,但未将Appium的driver对象绑定到Eyes。必须在初始化Eyes后调用
eyes.open方法,传入driver、应用名称、测试名称等关键信息。示例修改如下:def setup_eyes(driver) @eyes = create_eyes config(@eyes) @eyes.open( driver: driver, app_name: '你的应用名称', test_name: '你的测试名称', viewport_size: REGTANGLE_SIZE.new(414, 896) # 匹配目标设备的视口尺寸 ) end没有关联driver的话,Eyes无法获取页面实际尺寸,会导致width为0的错误。
TARGET.window捕获范围问题:原生移动应用中,直接使用TARGET.window可能无法正确捕获完整屏幕,尝试改用TARGET.window.fully确保捕获整个可视区域:def check_page(page) page = format_page(page) @eyes.check(page, TARGET.window.fully) endAppium Driver状态异常:调用
eyes.check前,需确保Appium driver已成功加载页面,且当前屏幕无遮挡、页面渲染完成。可添加元素等待逻辑,确认核心页面元素加载后再执行检查。SDK版本兼容问题:确认
eyes_appiumSDK为最新版本,旧版本可能与新版Appium存在兼容问题,导致尺寸获取失败。执行bundle update eyes_appium更新SDK。
内容的提问来源于stack exchange,提问作者Augustin Gottlieb Pequeno
相关产品推荐
相关产品推荐

