You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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)
    end
    
  • Appium Driver状态异常:调用eyes.check前,需确保Appium driver已成功加载页面,且当前屏幕无遮挡、页面渲染完成。可添加元素等待逻辑,确认核心页面元素加载后再执行检查。

  • SDK版本兼容问题:确认eyes_appium SDK为最新版本,旧版本可能与新版Appium存在兼容问题,导致尺寸获取失败。执行bundle update eyes_appium更新SDK。

内容的提问来源于stack exchange,提问作者Augustin Gottlieb Pequeno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 04:53:12