---
# System prepended metadata

title: 7/8共筆

---

# 7/8共筆

{%hackmd 1lpg7PuqRoaui6XyJcrylw %}

## Web GUI測試

- Selenium
```
docker run -d -p 4444:4444 -p 7900:7900 -v /dev/shm:/dev/shm selenium/standalone-chrome:4.0.0-rc-1-prerelease-20210618
```

```python=
driver = webdriver.Remote(
   command_executor='http://host.docker.internal:4444/wd/hub',
   desired_capabilities=DesiredCapabilities.CHROME)
```
:bulb: **Tip** 可以先在 WSL 用 `docker ps` 指令來檢查目前 Container 和 Local Host 之間 Port 轉傳的對應  
- 設定 `command_executor` 時設定正確的對應 Port 才能成功開啟 Web driver
- `0.0.0.0:4444 -> 4444/tcp` 意思是指定實體主機的 4444 Port 對應到 Container 4444 Port
    
![](https://i.imgur.com/RszYSDc.png)

:warning: 當設定不正確的 Local Host Port 時可以在 Console 看到以下錯誤

* `ConnectionRefusedError: [Errno 111] Connection refused`

- noVNC
    - URL  `http://localhost:7900/`
    - 登入密碼為 " `secret` "
    
![](https://i.imgur.com/ZCdRQNM.png)

:bulb: **Tip** 使用remote時，記得要把driver.quit()，因為如果沒有quit()，seesion滿了，你就會連不上了

:bulb: **Tip** 關於Wait的使用方式，建議可以使用Selenium裡面的wait，就可以避免硬性的等待
1. 直接等待某個時間:implicitly_wait(5)，後續的每一個driver.find_element都會等  
  [Implicit Waits 官方說明](https://selenium-python.readthedocs.io/waits.html#implicit-waits)
2. 等待某件事情結束或某個頁面結束再進行:wait.until(EC.alert_is_present()).accept()  這個舉例是他在等alert，詳情可以爬wait.until的用法
ps:有loading時建議使用2，因為使用1可能會有時間到時element沒有出現
3. WebDriverWait(driver, 5) 用於等待web loading 5秒

:bulb: **Tip** XPath學習: [w3schools XPath Tutorial](https://www.w3schools.com/xml/xpath_intro.asp)


- 選哪個Framework？
    - 較建議從cucumber開始寫，若時間上允許，同樣的測項在換到robot上實作一次。
- 怎麼開始？
    - 從寫測項開始

不管有無寫好的測試，均從寫測項開始，也就是在建立一個測項時步驟會如何撰寫
先想測項怎麼寫，之後再處理implement code

### 課堂QA
- Webdriver 是不是會遇到有需要定期更新的問題?
1. 如果是Local測試，有可能會需要定期更新，不然你也會遇到版本不同沒辦法執行測試的狀況
2. 如果使用contanier或許就可以固定版本
3. Selenium Container 的另一個好處如果要做跨版本的相容性測試相對容易（如果真的要做的話）

- git使用原則
    - 遠端的版本，建議避免放上一個還無法執行的code，避免他人如果pull下來後，會發現這塊無法使用
    - 在local端放還不能執行的就沒關係


:question:
- 機器Click某個element後就會重啟，有沒有什麼比較好的方式，可以來確定這台機器重開機了?
1.讀CLI的console固定字串，來判斷是否重開成功 (假設你的機器不支援console此方法無法使用)
2.使用PING的方式去做確認，例如連續Ping5~10次成功
3.其他 待討論

---
- Delbert，MRC有開始實作討論，目前沒有
- 時做過程提出的問題該如何分享給大家
    - 會議上提出的
    - 實作過程提出
- 發起討論Implement Code中的function該怎麼管理（命名...）
- 評估目表怎麼使用？