AutoIt Firefox _FFClick doesn't work on button? (FF.au3)

2.4k views Asked by At

Using the firefox plugin ("ff-au3") for AutoIt, how do I click a button?

Here is the HTML of the item I'd like to click:

<input accesskey="s" class="aui-button" id="login-form-submit" name="login" title="Press Alt+s to submit this form" type="submit" value="Log In">

And here is the code snippet to click the button:

   ;Click the "Log In" button, id is "login-form-submit"
   _FFClick("login-form-submit", "id")

At this point, my script is already connected to firefox, already on the page I need, and everything else works (except for this click part!)

Here is the error I get back:

_FFClick ==> No match: $sElement: FFau3.WCD.getElementById('login-form-submit')

Also, this works when I manually run it on the page using a javascript console:

document.getElementById("login-form-submit")

And here is the API for the plugin: http://english.documentation.ff-au3.thorsten-willert.de/ff_functions/_FFClick.php

Anyone see anything I'm doing wrong?

Versions:

  • Firefox 44.0.1
  • AutoIt v3.3.14.2
  • FF V0.6.0.1b-15.au3 (Firefox plugin)
  • MozRepl v.1.1.2
  • SciTE-Lite v. 3.5.4
1

There are 1 answers

2
Katie On BEST ANSWER

Well this didn't get much traffic but I found the solution! Pretty simple... I disconnected from firefox before executing the click!

When using firefox, you first need to open the firefox exe with the "Run" command, then you need to connect to firefox using the "_FFConnect" command. Next you can start clicking elements. Once you're done, disconnect from firefox using the "ProcessClose" command. The problem I was running into was I connected to firefox, then disconnected immediately, then I tried clicking. So, I made sure I disconnected after I did the clicking...

Working solution: myScript.au3 (See the "LogIn" function at the bottom)

#include <Constants.au3>
#include <MsgBoxConstants.au3>
#include <File.au3>
#include <EventLog.au3>
#include <FF V0.6.0.1b-15.au3> ;FireFox

OpenLog()
OpenFirefox()
ConnectToFirefox()
LogIn()

; ////////////////////////////////////////////////////
; Configure the Log
; ////////////////////////////////////////////////////
Func OpenLog()

   Global $log = FileOpen("K:\Log.txt", 2)

   ; Check if file opened for reading OK
   If $log == -1 Then
       FileWrite($log,"[ERROR] Could not open log file." & @CRLF)
       MsgBox(0, "Error", "Unable to open log file.", [ timeout = 0])
       Exit
    Else
       FileWrite($log,"[INFO] Opened log file successfully." & @CRLF)
    EndIf

EndFunc

; ////////////////////////////////////////////////////
; Open Firefox
; ////////////////////////////////////////////////////
Func OpenFirefox()
   ;Run Firefox in Maximized
   Global $ffPid = Run("C:\Program Files (x86)\Mozilla Firefox\firefox.exe","",@SW_MAXIMIZE)

   ; Check if firefox was opened OK
   If @error <> 0 Then
       FileWrite($log,"[ERROR] Could not open firefox." & @CRLF)
       MsgBox(0, "Error", "Could not open firefox.", [ timeout = 0])
       Exit
    Else
       FileWrite($log,"[INFO] Firefox opened successfully." & @CRLF)
    EndIf

   ;Wait 10 seconds for Firefox to open
   $result = WinWait("[CLASS:MozillaWindowClass]","",10)

   ; Check if file opened for reading OK
   If $result == 0 Then
       FileWrite($log,"[ERROR] Unable to open firefox class." & @CRLF)
       MsgBox(0, "Error", "Unable to open firefox class.", [ timeout = 0])
       Exit
    Else
       FileWrite($log,"[INFO] Opened firefox class successfully." & @CRLF)
    EndIf

   ;Wait for 2 seconds after opening
   Sleep(2000)

EndFunc

; ////////////////////////////////////////////////////
; Connect To Firefox
; ////////////////////////////////////////////////////
Func ConnectToFirefox()
   ; trying to connect to a running FireFox with MozRepl on
   If _FFConnect(Default, Default, 3000) Then
       FileWrite($log,"[INFO] Connected to Firefox." & @CRLF)
   Else
       FileWrite($log,"[ERROR] Can't connect to FireFox!" & @CRLF)
       MsgBox(64, "", "Can't connect to FireFox!")
   EndIf

   ;Wait for 2 seconds after opening
   Sleep(2000)
EndFunc

; ////////////////////////////////////////////////////
; Log into page
; ////////////////////////////////////////////////////
Func LogIn()
   ;Load Login Page
    _FFOpenURL("http://localhost/login.jsp")
    Sleep(2000)
    If @error <> 0 Then
       FileWrite($log,"[ERROR] Could not open URL." & @CRLF)
       MsgBox(0, "Error", "Could not open URL.", [ timeout = 0])
       Exit
    Else
       FileWrite($log,"[INFO] Opened URL successfully." & @CRLF)
    EndIf


   Sleep(2000)
   ;Click the "Log In" button, id is "login-form-submit"
   ;<input accesskey="s" class="aui-button" id="login-form-submit" name="login" title="Press Alt+s to submit this form" type="submit" value="Log In">
   _FFClick("login-form-submit", "id")

   If @error <> 0 Then
       FileWrite($log,"[ERROR] Could not click login button." & @CRLF)
       MsgBox(0, "Error", "Could not click login button:", [ timeout = 0])
       Exit
    Else
       FileWrite($log,"[INFO] Found and clicked login button successfully." & @CRLF)
    EndIf
EndFunc