????iQuery???????????????????????????????????????????????????????????

???????????????????iOS???????Object-C??JavaScript?????????Android?????Java????Windows 8?????C#??C++??????????????????Selenium??????????????

????iQuery?????????????Щ??????????????antlr????????????????????????????????????????????????C#??C++??JavaScript??Java??Object-C??Python??Ruby??????????????????????????

????????????????Java??JavaScript??汾????????????????????????????????????iQuery???????????

??????????????????????????Щ?????????????Android???ExpandableListView?? iOS???????????????????????????????????????????????????iOS???UIASwitch?????????????Android?? Windows 8???Radio???????????????iQuery????????????

?????????????????????iQuery????????????????????????????????????Andorid??????????

????“>> ExpandableListView”

???????????????????????????е?ExpandableListView??????iOS????????

????“>> UIAScrollView”

????????????????????????????????iQuery?????????????α???????????????????jQuery???????????α????????????????????????????????

????“:radio”

??????????????iQuery?????????????????:radio??Android????RadioButton???????iOS??????? UIASwitch????Windows Phone????RadioBox?????????????????????α??????????????????????iQuery???????????

??????????????????????????????????iOS????UIAButton.name()??????Android???????mText???????????Щ????????????????е??????е????????????Android????mBottom???????iOS????????

???????????????????????????iQuery?????????????????????????????????????

????iOS???

????“:button [name = ‘???’]”

????Android???

????“:button [mText = ‘???’]”

????????????????????????????iQuery??????α??????????????????????????????????????

????“:button [:text = ‘???’]”

??????α???????α?????????????????????壬????iQuery????????????

????UI???????????????? iOS UI????????????????Andorid UI???????????????????????β????????????????????ν??涼????????????

????????????????ɡ?

??????????????????

???????????????????????iQuery????????????????????????????????????????????????????????

??????????????α??α???????????????????????????????????????????????????????

???????α??

??????Java?汾?У???iQA.Runtime.jar???????????iQueryParser. registerPseudoClass??????????????μ?α?????????£?

???????

????iQueryParser. createParser(String iquery?? boolean registerPseudo)

???????????iQueryParser?????

?????????iQueryParser. registerPseudoClass(String name?? IPseudoClass func)???????μ?α???????????????????????text??α?????????????????????EditText??β??????

????parser.registerPseudoClass("text"?? new IPseudoClass() {

????public boolean resolve(ITreeNode node) {

????return filterByNameEndsWith(node?? "EditText");

????}

????});

??????JavaScript?汾?У????????????α??????????????汾?????????????

???????α????

??????Java???У????iQueryParser.registerPseudoAttribute???????????μ?α????????????£?

???????iQueryParser. createParser(String iquery?? boolean registerPseudo)???????iQueryParser?????

?????????iQueryParser. registerPseudoAttribute (String name?? IPseudoAttribute func)???????μ?α??????????????????????????bottom??α??

????parser.registerPseudoAttribute("bottom"?? new IPseudoAttribute() {

????public String resolve(ITreeNode node) {

????return node.getProperty("mBottom").getValue();

????}

????});

??????iOS??JavaScript?汾?е????????

???????????????JavaScript?????

????#import "common.js";

????#import "antlr3-all-min.js";

????#import "iQueryLexer.js";

????#import "iQueryParser.js";

????#import "error.js";

???????????iQuery?????

????var iq = new iQuery(selector);

???????α?????

????iq.parser.registerPseudoAttrs("bottom"?? function(uiaobj) {

????if ( uiaobj != undefined && uiaobj.rect != undefined ) {

????var rect = uiaobj.rect();

????return rect.origin.y + rect.size.height;

????}

????});

?????????????????

??????????Java?汾????????????????

??????????????iQA.Runtime.jar????????