George
George

Reputation: 4413

Applescript automation flipping checkbox not always working

I have the following applescript that is acting strangely. If the file sharing checkbox is unchecked it will check it everytime. If the file sharing checkbox is already checked it will sometimes uncheck it. then when it comes to the if statement that is to determine if the current state of the file sharing checkbox(this is to take place after the checking action) it never reads it as checked.

here is the thought proccess:

  1. open system prefs (works)
  2. show sharing pane (works)
  3. click the file sharing check box, row 3. (sort of works. checks if unchecked. does not uncheck)
  4. get current state of file sharing box, generate appropriate message(does not work)
  5. quit system prefs(works)
  6. Display message about what action was taken(works)

Apple Script

tell application "System Preferences"
activate
reveal (pane id "com.apple.preferences.sharing")
end tell
tell application "System Events"
    tell process "System Preferences"
        try
            click checkbox of row 3 of table 1 of scroll area of group 1 of window "Sharing"
            delay 2
            if checkbox of row 3 of table 1 of scroll area of group 1 of window "Sharing" is equal to 1 then
                set response to "File Sharing turned on"
            else
                set response to "File Sharing turned off"
            end if
            tell application "System Preferences" to quit
            activate (display dialog "Flipped")
        on error
            activate
            display dialog "something went wrong in automation but you are in the right menu..."
            return false
        end try
    end tell
end tell

Upvotes: 1

Views: 1881

Answers (1)

Asmus
Asmus

Reputation: 5247

Most of the time, the problem is that the window is not yet fully shown, so you should ask the UI element whether it is already available:

== I´ve edited the script below to reflect changes based on the comments.

tell application "System Preferences"
activate
reveal (pane id "com.apple.preferences.sharing")
end tell

tell application "System Events" to tell table 1 of scroll area of group 1 of window 1 of process "System Preferences"

    tell (1st row whose value of static text 1 is "File Sharing")
    set sharingStatus to value of checkbox 1 as boolean

    if sharingStatus is true then
        click checkbox 1
        my notify("File Sharing is now turned off")
    else
        click checkbox 1
        my notify("File Sharing is now turned on")

    end if
end tell

end tell

on notify(notification)
display dialog notification
end notify

Upvotes: 1

Related Questions