Example #1
0
        /// <summary>
        /// Find an Active Accessible object on an appPath via the
        /// gui model and/or a guiPath via Active Accessibility.
        /// The appPath is applied first if not null, then the guiPath.
        /// </summary>
        /// <param name="xmlPath">the xmlPath to a control or null</param>
        /// <param name="guiPath">the guiPath to click or null</param>
        /// <returns>The Active Accessible object or null</returns>
        private AccessibilityHelper findInGui(XmlPath xmlPath, string guiPath)
        {
            string path = null;

            if (xmlPath != null && xmlPath.isValid())
            {
                path = xmlPath.Path;
            }
            if (Utilities.isGoodStr(guiPath))
            {
                path += guiPath;
            }
            if (!Utilities.isGoodStr(path))
            {
                return(null);
            }
            GuiPath gp = new GuiPath(Utilities.evalExpr(path));

            if (gp == null || !gp.isValid())
            {
                return(null);
            }
            return(gp.FindInGui(m_ah, this));
        }
Example #2
0
 /// <summary>
 /// Gets an app-path xPath string from a VarNode id.
 /// It includes all the elements from the root.
 /// The root may not be the application, but a dialog or view, etc..
 /// If there is a problem, null is returned.
 /// </summary>
 /// <param name="id">A VarNode name.</param>
 /// <returns>xPath to the model node.</returns>
 private string getAppPathFromId(string id)
 {
     if (!Utilities.isGoodStr(id)) return null;
     MarkedNode mn = m_varNodes.get(id);
     if (mn == null) return null;
     XmlPath xp = new XmlPath(mn.node);
     return xp.xPath();
 }
Example #3
0
 /// <summary>
 /// Find an Active Accessible object on an appPath via the
 /// gui model and/or a guiPath via Active Accessibility.
 /// The appPath is applied first if not null, then the guiPath.
 /// </summary>
 /// <param name="xmlPath">the xmlPath to a control or null</param>
 /// <param name="guiPath">the guiPath to click or null</param>
 /// <returns>The Active Accessible object or null</returns>
 private AccessibilityHelper findInGui(XmlPath xmlPath, string guiPath)
 {
     string path = null;
     if (xmlPath != null && xmlPath.isValid()) path = xmlPath.Path;
     if (Utilities.isGoodStr(guiPath)) path += guiPath;
     if (!Utilities.isGoodStr(path)) return null;
     GuiPath gp = new GuiPath(Utilities.evalExpr(path));
     if (gp == null || !gp.isValid()) return null;
     return gp.FindInGui(m_ah, this);
 }
Example #4
0
 /// <summary>
 /// Determines the result of a Simian action.
 /// When actions can't be performed the problem is logged
 /// and false is returned.
 /// </summary>
 /// <param name="actionRef">An action in a rule.</param>
 /// <returns>true if the action was initiated successfully.</returns>
 public bool doAction(EmptyElement actionRef)
 {
     if (actionRef.getName().Equals("launch"))
     {               // launch the specified application
         bool   usedModel = false;
         string path      = actionRef.getValue("path");
         if (path == null)
         {
             path      = m_Config.getExePath();
             usedModel = true;
         }
         string name = actionRef.getValue("name");
         if (name == null)
         {
             name = m_Config.getExeName();
         }
         string args = actionRef.getValue("args");
         if (args == null && usedModel)
         {
             args = m_Config.getExeArgs();
         }
         string work = actionRef.getValue("work");
         if (work == null && usedModel)
         {
             work = m_Config.getWorkDir();
         }
         return(LaunchApp(path, name, args, work));
     }
     if (actionRef.getName().Equals("mark"))
     {                                         // mark the node as indicated
         string id = actionRef.getValue("id"); // a VarNode
         if (id == null)
         {
             return(false);
         }
         string As = actionRef.getValue("as");                 // How to mark the node
         // As == null is valid for removing the mark.
         return(m_views.Mark(id, As));
     }
     if (actionRef.getName().Equals("free"))
     {                                         // free the VarNode named
         string id = actionRef.getValue("id"); // the VarNode to free
         if (id == null)
         {
             return(false);
         }
         m_varNodes.add(id, null);
     }
     if (actionRef.getName().Equals("choose"))
     {                                                   // choose the control via the method and name it via id
         string control = actionRef.getValue("control"); // Type of the control to choose
         string id      = actionRef.getValue("id");      // a VarNode
         string exclude = actionRef.getValue("exclude"); // How to choose
         string method  = actionRef.getValue("method");  // How to choose
         if (!Utilities.isGoodStr(control))
         {
             return(false);
         }
         if (!Utilities.isGoodStr(id))
         {
             return(false);
         }
         if (!Utilities.isGoodStr(method))
         {
             return(false);
         }
         MarkedNode mn = null;
         if (control.Equals("view"))
         {
             mn = m_views.Choose(method, exclude);
         }
         if (mn == null)
         {
             m_log.writeEltTime("fail");
             m_log.writeAttr(control, mn.node.Name);
             m_log.writeAttr("was", "not known");
             m_log.endElt();
             return(false);
         }
         else
         {
             m_varNodes.add(id, mn);
             m_log.writeEltTime("selected");
             m_log.writeAttr(control, mn.node.Name);
             m_log.writeAttr("as", id);
             m_log.endElt();
         }
     }
     if (actionRef.getName().Equals("nav"))
     {                                           // find a model path to the referenced node
         string to  = actionRef.getValue("to");  // a VarNode
         string via = actionRef.getValue("via"); // a VarNode name, not set yet
         if (!Utilities.isGoodStr(to))
         {
             return(false);
         }
         MarkedNode mn = m_varNodes.get(to);
         if (mn == null)
         {
             return(false);
         }
         // What kind of node is this?
         string role = XmlFiler.getStringAttr((XmlElement)mn.node, "role", "*not Found*");
         if (role.Equals("*not Found*"))
         {
             return(false);
         }
         MarkedNode viaN = null;
         if (role.Equals("view"))
         {                  // get the menu node via mn and name it "via"
             string  xPath = "menubar//" + mn.node.Name + "[@role='menu']";
             XmlPath mPath = m_GuiModel.selectToXmlPath(null, xPath);
             if (mPath == null)
             {
                 return(false);                                   // really bad!
             }
             XmlNode menuNode = mPath.ModelNode;
             if (menuNode == null)
             {
                 return(false);                                      // really bad again!
             }
             viaN = new MarkedNode(menuNode, null);
             m_varNodes.add(via, viaN);
         }
         if (viaN == null)
         {
             return(false);                              // nothing more to do at the moment
         }
     }
     if (actionRef.getName().Equals("click"))
     {                                                 // click the specified control
         string id       = actionRef.getValue("id");   // a VarNode
         string appPath  = actionRef.getValue("on");   // an appPath
         string guiPath  = actionRef.getValue("at");   // a giuPath
         string side     = actionRef.getValue("side"); // "left" or "right"
         bool   leftSide = true;
         if (side != null && side.Equals("right"))
         {
             leftSide = false;
         }
         // Id provides a context ah that must be used to find the rest of the path!
         // can't just use the appPath from it. What if it's a dialog?
         XmlNode    context = null;
         MarkedNode mn      = null;
         if (Utilities.isGoodStr(id))
         {
             mn = m_varNodes.get(id);
             // bail out if id not defined yet.
             if (mn == null || mn.node == null)
             {
                 return(false);
             }
             context = mn.node;
         }
         return(click(context, appPath, guiPath, leftSide));
     }
     if (actionRef.getName().Equals("close"))
     {               // close the specified application
         if (m_proc != null)
         {
             closeWindow(m_proc);
         }
     }
     return(true);
 }