[英]Clipboard.GetText() throwing exception: OpenClipboard Failed
我有一個使用Moq Framework和Appium的非常簡單的 UI 測試,我正在嘗試測試復制命令。 我有以下代碼:
[TestMethod, STAThread]
public void VerifyCopyCommand()
{
Clipboard.Clear();
// Arrange
//---Some code to get the Context Menu
Thread.Sleep(500);
var copyItem = (contextMenu.FindElementsByClassName("MenuItem").Where(item => item.Text == "Copy")).First();
// Act
copyItem.Click();
Thread.Sleep(500);
// Assert
var clipboard = Clipboard.GetText();
//var clipboard = Clipboard.GetDataObject();
Thread.Sleep(500);
}
問題: Clipboard.GetText()
不斷拋出異常,如下面的屏幕截圖所示:
System.Runtime.InteropServices.COMException :“OpenClipboard 失敗(來自 HRESULT 的異常:0x800401D0 (CLIPBRD_E_CANT_OPEN))”
注意:如果我在 Visual Studio 的Quick Watch Window 中執行Clipboard.GetText()
語句,則語句會執行並且我能夠在其中看到預期的文本。
我認為這是因為您無法從 STA 線程訪問剪貼板。
如果是這種情況,您可以通過顯式啟動一個 STA 線程來修復它,從中調用Clipboard.GetText()
。
例如:
public static string? GetClipboardText()
{
string? result = null;
var thread = new Thread(() => { result = Clipboard.GetText(); });
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
return result;
}
您可以嘗試在單元測試中調用該方法而不是直接調用Clipboard.GetText()
來查看是否可以解決問題嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.