Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

JonHimself

macrumors 68000
Original poster
Nov 3, 2004
1,553
5
Toronto, Ontario
I'm fairly new to AppleScript so I'll try and explain this as best as I can. I've tried searching (web and MR forums) but haven't been able to come up with much... I'm not entirely sure I know how to ask the question so that makes it harder to find what I'm looking for.

I'm writing an AppleScript to use for running video files through a tagging program (Subler). The issue that I have run into is that when I get to the point where the program searches for results, not all video files return a result. For the files that do not return a result, most of the code will be useless (as it walks through subsequent screens that only matter if search results were found) and when it gets to the end - the last few codes triggering the program to save, close the window and quit the program - will not work because the Search dialogue/pop-up window is still displayed. My work-around is to add a line that triggers the Esc button but I would prefer to do it properly/learn about if/else and UI Elements.

I started using UIElementInspector to learn more about writing AppleScript to control specific UI elements as opposed to using a keystroke (like 36 to just hit enter when I know that the button I want is always the one highlighted).

Once I get to the point where the Search dialogue is opened I have a delay of 65 seconds (usually only takes 20-30 to search but I left extra time). There are two buttons that can then be pressed: "Add" and "Cancel".

I want to enter an "if" piece so that if the "Add" button is unavailable (using UIElementInspector I have assumed the relevant value is AXEnabled which is 0 if "Add" is unavailable and 1 if "Add" is available) the Script will click the "Cancel" button and then close the window and quit the program (that last part I can do). Then the "else" part would be if the "Add" button was available, in which case I would then just use the rest of the code that I have that already works.

I have attached the code below with some comments. Please note that I do plan on removing all of the code to simply hit 'return' with code that will instruct the button to click but I have only recently learned that. I'm hung up on this if/else piece and don't even know if it is possible. Please let me know if any other information might help.

Code:
tell application "System Events"
 tell process "Subler"
  delay 5
  keystroke "m" using {shift down, command down} <-- opens search box
  delay 65
    tell sheet 1 of window 1 <-- this is where I would like the if/else piece
      tell button "Add"
        click
      end tell
    end tell
  delay 5
  key code 124
  delay 5
  key code 36
  delay 65
  key code 53 <-- this is my temporary solution... hitting escape to 'cancel'
  delay 5
  keystroke "s" using {command down}
  delay 15
  keystroke "w" using {command down}
  delay 5
  keystroke "q" using {command down}
 end tell
end tell
 
Last edited:

Red Menace

macrumors 6502a
May 29, 2011
578
226
Colorado, USA
You can just get the names of all of the buttons of the sheet and look to see if the desired button is in the list. In the following example, I use the full button paths so that the add part of the script can be contained in the if statement (and not in the sheet tell statement):

Code:
tell application "System Events" to tell process "Subler"
	delay 5
	keystroke "m" using {shift down, command down} -- opens search box
	delay 65
	tell sheet 1 of window 1 to set theButtons to name of buttons -- get all of the button names
	if "Add" is not in theButtons then
		click button "Cancel" of sheet 1 of window 1 of application process "Subler"
	else
		click button "Add" of sheet 1 of window 1 of application process "Subler"
		-- the rest of the add script
	end if
end tell
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.