---
# System prepended metadata

title: Automation Knowledge passing notes

---

# Automation Knowledge passing notes

[toc]


## Links:
* [Daily scrum ](https://docs.google.com/document/d/15zPwGAeuZyD-y-ZLZaZQkjA7Rv8bc_PydO6pND0-aSc/edit)
* [Bi weekly Sync Tune automation issue/plan](https://docs.google.com/document/d/1YX9nx2VMsPeXZv_wzZ6RBlu8RG41lBdcSbPspoNLz5E/edit)




## 22/10/25

### About LogiTune
* Versions: 
    1. Released version
    2. RD bug fixed version 

* Turn on Develope Mode:
    Properties -> shortcut:"C:\Program Files (x86)\Logitech\LogiTune\LogiTune.exe" --arg --godMode
    
* Tests: Daily run/anity test/ Regression test
    **Goal:** Run tests when new firmware released

### Jenkins
* A CI/CD tool (程式整合)
* Pipeline: manage the testing process (Groovy)
* Build in Node: Where Jenkins is

### Questions Juo asked
 **Q1**: Since OS updates once a year, how would QA team decide when to stop testing on old versions
 **A1**: Chips matters more than OS system 

## 22/10/26

### Knowledge
* BT == Bluetooth

### Things done today:
* Setting up environment
    
    * If encounter error installing "pywin32==228" --> try python3.7
    * Error installing "winrt" --> try update pip and wheel

    - [x] install requirement.txt
    - [x] AWS ammand line tool (requires user info)
    - [x] JDK 8 

## 22/10/27    

### Jira Zephyr

## 22/11/02

### From Scrum  meeting
* need to discuss with Pawell about wheather to pull the part he fixed
* Found a bug on Sidetone YAYYYYYY

### Knowledge:
* DUT == Device Under Test

### Question:
* **Whats the differentce between fail and broken in Allure report ?**
    * Assertion: pytest/unittest assert
    * broken: something went wrong during the testing process, not necessarily DUT problem 
    * Equally important, "Red" is not more urgentˊˇˋ  

### Acroname intro:
1. Add test case at detection
2. Switch hub mechanism -> MacOS:
    * Only for Win10 & Win11 so far (1 hub linked to 2 slaves)    
    * Need to impliment on mac after it arrives
3. Relay part intro
    * Controls the buttons on headsets 
5. properties.LOCAL
    * Detailed information about serial number/port/...
    * (Can be improved) 
7. Win10 and Win11 -> relay currently is on port 0
8. Merge from master to daily_run_ver3
    * Make sure getting the newest updates 
    * Clonflicts might occure
10. BAT test case list:
    * [Test case list](https://docs.google.com/spreadsheets/d/1P_rGsJbmtCZ6yUcFI83-F-XGt558o6PjDBffEHM0Aco/edit#gid=419671822) 
12. headset distribution in lab
    * [Headset distrbution in lab](https://docs.google.com/spreadsheets/d/1bd70UZBhjPxczRGXAwfLz39y13f1wB4XD4xUZgsWSSM/edit#gid=0)
14. branch脈絡
 ```mermaid
graph LR

Test_connect_Github --> Reboot_win_10 --> win10_daily --> win11_daily 
Test_connect_Github --> mac_daily --> mac_m1_daily
 
```

## 22/11/03

### Jenkins Intro
1. Jenkins overview:
    * There are different type of projects, we use pipline
    * Blue Ocean -> this Jenkins verison not support yet
    * Menu -> Manage Jenkins -> Node
    * If slave got off line: 
        1. Reboot
        2. Go to desktop and run 'agent.jar' in power shell
        * (agent.jar generated by Jenkins)
3. Pipeline:
    * Use Groovy script: 
    ```groovy 
    pipline{
        agent any
    
        options{
            timestamps()            
    }
        stages{
            stage(){
                agent{
                    node{
                        
                    }
                }
                steps{
                    script{...}
                }    
            }
        }
    }
    ```
5. Trigger options:
    * Build after certain project
    * Build periodically
    * Git hub
    * ... 
6. Plugins
    * Mail-watcher: send email when slave offline
8. mail-watcher-plugin
9. Using Pytest to run test cases


#### Questions 


* whats the difference between bash and powershell?
    * basically powershell is a newer and more powerfull cmd :D
* pytest vs unittest


## 22/11/14
### Road map [PPT by Edward](https://docs.google.com/presentation/d/1I5iLLeN_pf2p7c6xuy38Kmo0QZsZNPC-QfRZv-o7aGw/edit#slide=id.g1889e3379be_0_2)

## 22/11/15
* Finished vc56904
* Studing on BT connection methods for Mac 
    * Apple Automator and apple script 
    * [apple script documentation](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-158637)
 
## 22/11/17~22/11/21
### Research on Applescript:

* [Documentation](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html)
* Usage: automating Mac  


## DECEMBER 2022
* Added one M1 machine
* Added one more acroname to each system
* Added BT test cases for ZV 130, ZV wireless, ZV 125 to both Windows and Mac 
* Time out isseues on Jenkins
#### 12/5
* Mic level issue on Enduro: DUT always on mute
    * FIXED by Paul on DUT

#### 12/22
* Add detection Zone 900 
    * Dongle for both, BT for MAC (relay)
    * 

#### 12/27
* Figure out new method for BT connection on M1 machine 
    * Only works for our machine for now (.py script stored local)
        * Needs to optimise it to project

* Issue: Canlender take too longer
    * tmp fix : extend timeout
* TODO: 
    * Zone 900 BT test cases  
    * Zone Wireless BT test cases 
    


## 2023/01/04

* Finished BT test cases for Zone 900 and Zone wireless
    * PR opened
* Finished power cycle for zone900 and zone wireless for dongle 
    * Not yet tested on machines 

* TODO:
    * Short video for automation 
    * BT test cases for Zone wireless 2 

### Applescripts:
* For Mac12:
```applescript
on run argv
	return connectDevice(item 1 of argv)
end run

on connectDevice(deviceName)
	tell application "System Preferences"
		reveal pane "com.apple.preferences.Bluetooth"
		activate
	end tell
	tell application "System Events" to tell process "System Preferences"
		with timeout of 30 seconds
			if (exists window "Bluetooth") exists then
				delay 10
				click window "Bluetooth"
				set elements to entire contents of table 1 of scroll area 1 of window "Bluetooth" of application process "System Preferences" of application "System Events"
				repeat with e in elements
					if class of e is UI element and name of e is deviceName then
						click button of e
					end if
				end repeat
			end if
		end timeout
		
	end tell
	delay 10
	tell application "System Preferences"
		close window "Bluetooth"
	end tell
end connectDevice
```

* For M1(Ventura):
```applescript 
on run argv
	return connectDevice(item 1 of argv, item 2 of argv)
end run

on connectDevice(deviceName, Dir)
	tell application "System Settings"
		activate
		delay 1
	end tell
	tell application "System Events"
		tell application process "System Settings"
			tell outline 1 of scroll area 1 of group 1 of splitter group 1 of group 1 of window 1
				select row 7
			end tell
			if name of window of application process "System Settings" of application "System Events" is not "Bluetooth" then
				tell outline 1 of scroll area 1 of group 1 of splitter group 1 of group 1 of window 1
					select row 5
				end tell
			end if
			delay 3
			set devices to group 3 of scroll area 1 of group 1 of group 2 of splitter group 1 of group 1 of window "Bluetooth" of application process "System Settings" of application "System Events"
			click devices
			set eles to entire contents of devices
			repeat with e in eles
				if name of e is deviceName then
					set p to position of e
					set p_x to item 1 of p
					set p_y to item 2 of p
					delay 2
					do shell script "python3 " & Dir & "/move_cursor.py " & p_x & " " & p_y
					delay 3
					click button 1 of group 3 of scroll area 1 of group 1 of group 2 of splitter group 1 of group 1 of window "Bluetooth" of application process "System Settings" of application "System Events"
				end if
			end repeat
			
			delay 3
			-- click on button x to close window
			click button 1 of window "Bluetooth" of application process "System Settings" of application "System Events"
		end tell
	end tell
end connectDevice
```
* move_cursor.py:
``` pyhton 
import pyautogui
import sys

x = sys.argv[1]
y = sys.argv[2]

pyautogui.moveTo(int(x), int(y))

```

### Test related names

* CAT-
* Sanity test
* 
    

## 2023/06/14

#### Pyinstaller tricks

* Import all the packages from the entry script
* set root path with Path(sys.executable).parent
* include all the scripts/files into "./..." path
