سؤال

أنا أجرب Watin لاختبار واجهة المستخدم الخاصة بنا ، يمكنني إجراء اختبارات للعمل ، لكن لا يمكنني الحصول على إغلاق بعد ذلك.

أحاول إغلاق IE في رمز تنظيف الفصل الخاص بي ، باستخدام مثال Watin IestaticinstanceHelper تقنية.

يبدو أن المشكلة تربط بخيط IE ، الذي يخرج:

_instance = IE.AttachTo<IE>(Find.By("hwnd", _ieHwnd));

(_iehwnd هو مقبض IE المخزّن عندما يتم إطلاق IE لأول مرة.)

هذا يعطي الخطأ:

طريقة تنظيف الفئة class1.myclasscleanup فشل. رسالة الخطأ: watin.core.exceptions.browsernotfoundException: لا يمكن العثور على قيد مطابقة نافذة IE: السمة "hwnd" تساوي '1576084'. انتهت عملية البحث بعد "30" ثانية .. تتبع المكدس: في watin.core.native.internetexplorer.attachtoieHelper.find (القيد Findby ، int32 timeout ، WaitforComplete)

أنا متأكد من أنني يجب أن أفتقد شيئًا واضحًا ، هل حصل أي شخص على أي أفكار حول هذا؟ شكرًا

للاكتمال ، يبدو المساعد الثابت مثل هذا:

public class StaticBrowser
{
    private IE _instance;
    private int _ieThread;
    private string _ieHwnd;

    public IE Instance
    {
        get
        {
            var currentThreadId = GetCurrentThreadId();
            if (currentThreadId != _ieThread)
            {
                _instance = IE.AttachTo<IE>(Find.By("hwnd", _ieHwnd));
                _ieThread = currentThreadId;
            }
            return _instance;
        }
        set
        {
            _instance = value;
            _ieHwnd = _instance.hWnd.ToString();
            _ieThread = GetCurrentThreadId();
        }
    }

private int GetCurrentThreadId()
{
    return Thread.CurrentThread.GetHashCode();
}
    }

ويبدو رمز التنظيف مثل هذا:

private static StaticBrowser _staticBrowser;

[ClassCleanup]
public static void MyClassCleanup()
{
    _staticBrowser.Instance.Close();
    _staticBrowser = null;
}
هل كانت مفيدة؟

المحلول 3

تم إصلاح هذا بنفسي عن طريق إلقاء MSTEST واستخدام MBUnit بدلاً من ذلك. لقد وجدت أيضًا أنني لست بحاجة إلى استخدام أي من الأشياء IestaticinstanceHelper أيضًا ، فقد نجحت فقط.

نصائح أخرى

المشكلة هي أنه عندما تنفذ MSTEST الطريقة مع [ClassCleanup] السمة ، سيتم تشغيلها على موضوع ليس جزءًا من ستا.

إذا قمت بتشغيل الكود التالي ، فيجب أن يعمل:

[ClassCleanup]
public static void MyClassCleanup()
{
    var thread = new Thread(() =>
    {
        _staticBrowser.Instance.Close();
        _staticBrowser = null;
     });

    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
    thread.Join();
}

يذكر موقع واتين باختصار أن واتين لن يعمل مع المواضيع وليس في STA هنا لكن ليس من الواضح ذلك [TestMethod]يركض في STA بينما مثل أساليب مثل [ClassCleanup] و [AssemblyCleanupAttribute] لاتفعل.

بشكل افتراضي عندما يتم تدمير كائن IE ، فإنها تتوافق مع المتصفح.

قد يحاول رمز التنظيف الخاص بك العثور على متصفح يغلق بالفعل ، وهذا سبب وجود خطأ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top