Other selectors for the view
archer29m opened this issue · 4 comments
Hello,
Is there a way that I can add more selectors (other than 'text', 'resource_id', 'class', 'out_coordinates', and 'in_coordinates') for a view? For example a 'content-desc'?
And is there any example for 'in_coordinates' usage? E.g., if there is a button with [35,1500] and [120,1600] coordinates, what should I put for 'in_coordinates' or 'out_coordinates' values in the script json file?
I see they are defined as follows:
'out_coordinates': [(INTEGER_VAL, INTEGER_VAL)]
'in_coordinates': [(INTEGER_VAL, INTEGER_VAL)]
So should the view be defined as something like the following:
"view_1": {
"in_coordinates": "[(100,1550)]",
"class": ".*Button"
}
But, it doesn't match the view. So is there any example for 'in_coordinates' or 'out_coordinates' usage?
Thanks
I found what is wrong. Following two lines in input_script.py
file are wrong:
line 282: for out_coordinate in grammar_value:
it should be
for out_coordinate in selector_value:
and
line 286: for in_coordinate in grammar_value:
it should be
for in_coordinate in selector_value:
because grammar_value
is always (0,0) and doesn't contain the actual values as it is only for grammar check purposes.
I fixed it by using the dict value of selector_value (I used literal_eval
for this purpose) and now it works.
I found what is wrong. Following two lines in
input_script.py
file are wrong:line 282:
for out_coordinate in grammar_value:
it should be
for out_coordinate in selector_value:
and
line 286:for in_coordinate in grammar_value:
it should be
for in_coordinate in selector_value:
because
grammar_value
is always (0,0) and doesn't contain the actual values as it is only for grammar check purposes.
I fixed it by using the dict value of selector_value (I usedliteral_eval
for this purpose) and now it works.
Hello, I have also encountered with this problem and used "selector_value" instead of "grammer_value" in input_script.py, but then I wonder what the correct format of view defined in script should be since I have read the method check_grammar_is_coordinate(value) and tried the following:
-
"view_1": {
"in_coordinates": "[(100,1550)]",
"class": ".*Button"
} -
"view_1": {
"in_coordinates": ["(100,1550)"],
"class": ".*Button"
}
and neither of them works, both of them can not pass the method check_grammar_is_coordinate(value)
It would be really appreciated to get your reply.
There is something wrong for that check point too. I removed it for coordinates
, and it works. So just remove the following check point:
DroidBotScript.check_grammar_is_coordinate(in_coordinate)
and make sure to use the correct format as follows:
"in_coordinates": "[(100, 1550)]"
Hi guys,
I have to say everything related to script is not well tested. Thank you for pointing out so many issues.
Regarding your questions:
Is there a way that I can add more selectors (other than 'text', 'resource_id', 'class', 'out_coordinates', and 'in_coordinates') for a view? For example a 'content-desc'?
You have to modify the source yourself. You many want to set breakpoint at adapter/droidbot_app.py to see what fields other than
text,
resource_id`, etc. are in a view.
Is there any example for 'in_coordinates' usage?
Sorry, there isn't. in_coordinates
are supposed to be some coordinates inside the view that you want to select, while out_coordinates
are supposed to be outside of the view. However, I hadn't used them. It seems @archer29m 's fix is correct.
The correct syntax for 'in_coordinates' and 'out_coordinates'
The correct definition should be:
'out_coordinates': [[INTEGER_VAL, INTEGER_VAL]]
'in_coordinates': [[INTEGER_VAL, INTEGER_VAL]]
Each coordinate should be a 2-element list instead of a tuple.
I just created a PR with the possible fix, however I haven't tested it yet.