簡體   English   中英

Clipboard.GetText() 拋出異常:OpenClipboard 失敗

[英]Clipboard.GetText() throwing exception: OpenClipboard Failed

我有一個使用Moq FrameworkAppium的非常簡單的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM