0

我有一个简单的例程,可以通过在屏幕上向左滑动来删除许多记录。它只删除某种状态的记录,即准备提交。最高记录可能不一定处于那种状态,所以我不能使用固定的 y 坐标。相反,我使用在该状态下找到的第一条记录的 y 坐标。

这是我要执行的代码:

while query("* marked:'SUBMIT'").count > 0
  y = query("UIButtonLabel marked:'SUBMIT'")[0]["rect"]["center_y"]
  uia('target.dragFromToForDuration({x:"481.5", y:"#{y}"}, {x:"350", y:"#{y}"}, "1")')
  touch("* marked:'Delete'")
  touch("view:'_UIAlertControllerActionView' marked:'Delete'")
end

问题是变量 y 似乎在所有这些引号中都无法访问。该方法成功,但 UI 未按预期响应。我在控制台中尝试了该方法。当我将变量替换为整数时,它按预期工作,但变量没有。我试着让它成为一个没有区别的全局变量。我尝试使用点击命令来点击按钮,但再次无声地失败。

irb(main):006:0> y = query("UIButtonLabel marked:'SUBMIT'")[0]["rect"]["center_y"]
218.5
irb(main):007:0> y
218.5
irb(main):008:0> uia('target.dragFromToForDuration({x:"481.5", y:"#{y}"}, {x:"350", y:"#{y}"}, "1")')
{
  "status" => "success",
   "index" => 1
}

有没有办法以这种方式引用此方法中的变量?

4

1 回答 1

0

创建的字符串''不会执行插值。所以你'...#{y}...'的字面上会包含该文本。

您可以使用双引号 ( ""),但是您必须转义所有内容:

uia("target.dragFromToForDuration({x:\"481.5\", y:\"#{y}\"}, {x:\"350\", y:\"#{y}\"}, \"1\")")

您可以使用%Q来避免转义:

uia(%Q(target.dragFromToForDuration({x:"481.5", y:"#{y}"}, {x:"350", y:"#{y}"}, "1")))

我不知道这个库,但它也可能像这样工作:

uia("target.dragFromToForDuration({x:'481.5', y:'#{y}'}, {x:'350', y:'#{y}'}, '1')")
于 2014-10-29T05:16:32.140 回答