---
# System prepended metadata

title: Selenium自動開啟外部超連結
tags: [note]

---

# Selenium自動開啟外部超連結

###### tags: `note`

使用Selenium執行自動化測試時，Chrome若遇到開啟外部應用的連結(external protocol)，基於安全考量，會跳出同意視窗

例如連結為`sip:youremail@domail.com`，連結至外部的Skype應用，出現下圖的彈窗
![Skype](https://i.imgur.com/0Wayoe5.png)
確認後會開啟本機的Skype應用

雖然外觀與DOM的Confirm()相似，但此類彈窗無關HTML，屬於瀏覽器層級，無法使用WebDriver控制

```csharp
// 以下操作皆無效
browser.switchTo().confirm().accept();
browser.switchTo().window(handles[0]);
```

自動化測試遇到此外部連結將無法繼續執行
解決辦法是在啟動瀏覽器時，用option將外部連結設為**永遠允許開啟**
程式碼如下

```csharp
var option = new ChromeOptions();
option.AddUserProfilePreference(
    "protocol_handler.allowed_origin_protocol_pairs", 
    new Dictionary<string, Dictionary<string, bool>> {{ 
        @"https://DOMAIN_TO_TEST",  new Dictionary<string, bool> { 
            { "PROTOCOL_TO_TEST", true } 
        }
    }}
);
using var driver = new ChromeDriver(option);
```

Ref: <https://stackoverflow.com/a/63333492>
