private static bool FindElementFromRoot(string body, List <GameObject> root, HttpListenerResponse response) { FindBody findRequest = ParseFindElementBody(body, response); if (findRequest == null) { return(true); } Component found = null; //need to go use all root objects //as context foreach (var rgo in root) { var resp = parser.Evaluate(findRequest.selector, rgo); if (resp.Count != 0) { found = resp [0]; break; } } //no results found if (found == null) { if (WebDriverManager.instance.ImplicitTimeout == 0) { WebDriverManager.instance.WriteElementNotFound(response); return(true); } else { return(false); } } string uuid = System.Guid.NewGuid().ToString(); uuid = WebDriverManager.instance.AddElement(found, uuid); Dictionary <string, string> attributes = ComponentAttributes.Attributes(found.GetType(), found); StringBuilder jsonRepr = new StringBuilder("{"); jsonRepr.AppendFormat("\"name\":\"{0}\",", found.name); foreach (var attr in attributes) { jsonRepr.AppendFormat("\"{0}\":\"{1}\", ", attr.Key, attr.Value); } jsonRepr.AppendFormat("\"{0}\":\"{1}\"", WebElementIdentifierKey, uuid); jsonRepr.Append("}"); WriteElementList(response, new List <string> { jsonRepr.ToString() }); return(true); }
private void ParserEvaluateTest() { Debug.Log("start evaluate test"); var parser = new XPathParser(); float startTime = Time.realtimeSinceStartup; GameObject root = GameObject.Find("TestText"); var results = parser.Evaluate("/button", root); Debug.Assert(results.Count == 1); Debug.Assert(results[0].name == "TestText"); results = parser.Evaluate("//button//text", root); Debug.Assert(results.Count == 1); Debug.Assert(results[0].name == "Text"); results = parser.Evaluate("/text", root); Debug.Assert(results.Count == 0); results = parser.Evaluate("//text[@text]", root); Debug.Assert(results.Count == 1); Debug.Assert(results[0].name == "Text"); results = parser.Evaluate("/button[@text]", root); Debug.Assert(results.Count == 0); results = parser.Evaluate("/button[@interactable]", root); Debug.Assert(results.Count == 1); Debug.Assert(results[0].name == "TestText"); results = parser.Evaluate("button", root); Debug.Assert(results.Count == 3); results = parser.Evaluate("//button[@name=\"Second\"]", root); Debug.Assert(results.Count == 1); Debug.Assert(results[0].name == "Second"); results = parser.Evaluate("//button[@interactable=\"False\"]", root); Debug.Assert(results.Count == 1); Debug.Assert(results[0].name == "Third"); results = parser.Evaluate("//text[@text=\"some text overhere\"]", root); Debug.Assert(results.Count == 1); Debug.Assert(results[0].name == "Text"); results = parser.Evaluate("/button//button", root); Debug.Assert(results.Count == 2); Debug.Log("time " + (Time.realtimeSinceStartup - startTime)); Debug.Log("end evaluate test"); }