# Actions

AXTerminator supports two action modes: **Background** (default) and **Focus**.

## Action Modes

### Background Mode (Default)

Clicks happen without stealing focus from your current window:

```python
import axterminator as ax

app = ax.app(name="Calculator")
element = app.find("5")

# Background click (default)
element.click()

# Explicit background mode
element.click(mode=ax.BACKGROUND)
```

!!! success "Background Testing"
    AXTerminator uses `AXUIElementPerformAction` on unfocused windows. Your workflow stays uninterrupted while tests run.

### Focus Mode

Brings the application to the foreground:

```python
# Focus click - brings app forward
element.click(mode=ax.FOCUS)

# Required for text input
element.type_text("Hello", mode=ax.FOCUS)
```

## Click Actions

```python
# Single click
element.click()

# Double click
element.double_click()

# Right click (context menu)
element.right_click()
```

## Text Input

```python
# Type text (requires FOCUS mode)
text_field = app.find("role:AXTextField")
text_field.click(mode=ax.FOCUS)
text_field.type_text("Hello World!")

# Set value directly (where supported)
text_field.set_value("New value")
```

## Keyboard Actions

```python
# Press specific keys
element.press_key("Return")
element.press_key("Tab")
element.press_key("Escape")

# Key combinations
element.press_key("Command+S")
element.press_key("Command+Shift+N")
```

## Screenshots

```python
# App screenshot
png_data = app.screenshot()

# Element screenshot
element_png = element.screenshot()

# Save to file
with open("screenshot.png", "wb") as f:
    f.write(png_data)
```

## Action Timing

```python
import time

# Add delays between actions if needed
element1.click()
time.sleep(0.1)
element2.click()

# Or use wait_for_idle
from axterminator.sync import wait_for_idle
element1.click()
wait_for_idle(app, timeout_ms=1000)
element2.click()
```
