我刚开始使用lua,而且我有一些代码,来自某些故意错误的人。现在我遇到了一个障碍,为以下代码打开了这个错误:
function SIM_Utils:ClickButton(app, buttonName)
page = app:getTopPage()
widgets = page:getWidgets(buttonName)
print (type(widgets))
print (widgets[1])
widgets[1]:click(true, 5000)--this yields "attempt to index field '?' (a nil value)"
widgets[1]:click(false,0)--this yields "attempt to index field '?' (a nil value)"
app:captureScreen()
end
这将导致:
table
WidgetCommon (09590790)
L.E。
运行之后Alex发布的结果是:
widgets=
table: 0A45CF28
1
WidgetCommon (09590790)
表格是:0A ......我要找的答案是什么?
L.E。 2:重新发布整个函数,因为它似乎是问题所在的地方
答案 0 :(得分:1)
page:getWidgets
返回什么?您可以使用print(type(widgets))
进行检查。如果它是一个表,那么该表中没有定义数组位置1(您可以使用pairs
函数遍历表内容)。如果它不是一个表,那么你试图在一个不是表的东西上查找索引,这将不起作用。
此外,由于您是Lua的新用户,请注意page:getWidgets
不是内置组件。因此,您需要加载此功能或使用提供此功能的相应派生应用程序。
答案 1 :(得分:0)
尝试运行以下代码:
widgets = page:getWidgets(buttonName)
print("widgets=", widgets) -- Should print out something like "Widgets= 0x12345678". If it doesn't then widgets is nil. In other words nothing is there.
for k, v in pairs(widgets) do
print(k, v)
end
这将确保您确保拥有widgets
表,如果您这样做,它会告诉您其中的内容。如果索引为1时没有任何内容,那么这就是你的问题:page:getWidgets(buttonName)
没有像你期望的那样返回小部件列表。
答案 2 :(得分:0)
这似乎不太可能,但它可能(实际上看起来就像你发布的信息中唯一的可能性)你正在使用的库正在抛出错误,而不是你的代码。请注意,当在Lua中抛出错误时,抛出代码并告诉Lua将错误显示为从您的调用代码中抛出,而不是在库代码中。这应该仅用于逻辑错误,如“Widget :: show的错误参数”,而不是像你得到的那样,但它可能发生。此外,C函数中的错误将显示出类似于代码的错误。 EG:
io.open("myFile").read() --> should be ":read", not ".read"
stdin:1: attempt to index a nil value
stack traceback:
stdin:1: in main chunk
[C]: ?
您是否有要显示的堆栈追溯以及错误?