"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > قارن HTML في Playwright .NET

قارن HTML في Playwright .NET

تم النشر بتاريخ 2024-11-01
تصفح:496

Compare HTML in Playwright .NET

تصوير ميغيل أ. بادرينيان من بيكسيلز

يمكن أن يمثل التحقق التلقائي من النص (وHTML الخاص به) تحديًا إذا لم تكن مرتاحًا للغة وإطار العمل الذي تستخدمه. إن الحصول على وقت محدود للتعلم والاستكشاف هو تحدي خاص به. كانت إحدى المهام التي قمت بها لأتمتة اختبار الدخان لمشروعنا هي التحقق من النص في كل بيئة، بحيث يكون لكل إعداد محدد رسالة ترحيب خاصة به. وأنا أعترف أنني لم أكن متأكدًا تمامًا من أين أبدأ. كنت أعرف ما أحتاجه، ووجدت مكان جلبه. لكن تجميع كل الأجزاء معًا لم يكن بهذه البساطة كما يبدو.

لقد بدأت بالحاجة إلى الوصول إلى قاعدة البيانات. ثم العمل مع الإعداد الخاص بنا للتأكد من أنه يمكنني استخدام إعدادات التطبيق (التي تخبر إطار العمل بمكان العثور على المعلومات وتعمل مع إعدادات التكوين للحفاظ على خصوصية المعلومات) للاتصال بقاعدة البيانات أثناء التشغيل. يمكنني بعد ذلك تجميع الأجزاء معًا والحصول على المعلومات من قاعدة البيانات ومقارنتها بالمعلومات المعروضة للاختبار.

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

بمجرد إنشاء الوصول إلى قاعدة البيانات (وسلسلة الاتصال المناسبة!)، تمكنت من تعيين نص الصفحات كمتغير. كان هذا هو الجزء السهل: كنت أعرف ما كنت أفعله هنا وشعرت بالإنجاز في إنجازه. لقد قمت بإجراء اختبار Playwright، مع توقع أن النص الموجود على الصفحة سيطابق الكلمات، ولكن ليس مكونات HTML. وكنت على حق - الكلمات المناسبة كانت موجودة، ولكن الاختبار فشل مع إضافة HTML.

وقت البحث! كانت المحاولة الأولى باستخدام Page.ContentAsync()، وهو أمر للحصول على HTML الكامل للصفحة، بما في ذلك الرؤوس. يجب أن يسمح لي هذا بالبحث فيه والعثور على السلسلة الفرعية للنص، أليس كذلك؟ كفكرة أولى، لم تكن الفكرة فظيعة جدًا - لقد قمت بحفظ ملف HTML الذي كنت أبحث عنه، وكل ما كنت بحاجة إلى فعله هو الاطلاع على محتويات المستند بالكامل لتحديد موقعه. ليست فعالة، وبالتأكيد ليست ممارسة جيدة! يجب أن أحصل على النتيجة التي أحتاجها ويمكن بعد ذلك التكرار عليها.

لم يحدث ذلك. لم يكن من الممكن العثور على سلسلة فرعية في الصفحة بأكملها بسرعة، وأردت أن تكون عملية التشغيل الآلي الخاصة بي سريعة. بعد بضع عشرات من المحاولات لجعل هذا الأمر يعمل كما أردت، ومع الأخذ في الاعتبار قاعدة العمل (إذا لم تتمكن من حل المشكلة خلال 45 دقيقة من الجهد، فقد حان الوقت لسؤال شخص آخر)، عقدت اجتماعًا مع أحد المطورين. أعلم أنهم مشغولون وينشئون تحديثًا ضروريًا للغاية: انتهى الاجتماع بملاحظة مرفقة "يمكننا إعادة الجدولة إذا لزم الأمر".

أثناء انتظار الاجتماع، واصلت الاهتمام به: كان أحد التحديات في تضييق المنطقة هو فئة div - لم تتم تسميتها بشكل جيد، ومع Bootstrap، احتمال تكرار divs مع لقد تسبب لي نفس الاسم في مشاكل على الصفحات الأخرى. عندما تحدثت إلى شخص كان هنا لفترة أطول مني، اكتشفت أن هذا هو القسم الثالث دائمًا في الصفحة.

الآن لدي خطة جديدة للعثور عليه - استخدم محدد موقع Nth()، وابحث عن div الصحيح. أرغب في حل هذه المشكلة، وكتابة المنشور الذي أكتبه الآن، والانتقال إلى العدد التالي قبل الاجتماع. كما يعلم و/أو يشتبه الكثير منكم، يعد هذا حافزًا جيدًا لحدوث شيء عاجل، وقد حدث بالفعل. تم نسخ الخطط من صفحة إلى أخرى في المنظم لعدة أيام، حتى حان وقت التطوير الثنائي.

يعد العمل مع هذا المطور دائمًا متعة: فلدينا الكثير من القواسم المشتركة ونحترم بعضنا البعض. على سبيل المكافأة، فهم جيدون في التدريس! بعد مراجعة سريعة لما هو الهدف، راجعنا المحاولات التي قمت بها لحل هذه المشكلة. لقد تركت الأخير، مع الأخطاء الموجودة في IDE، على أمل أن يكون ذلك مفيدًا. والآن لإحراز تقدم!

باستخدام مصحح الأخطاء، تحققنا من أنه تم سحب HTML بشكل صحيح. كان هذا أحد المجالات التي لم أتحقق منها بالكامل، ولحسن الحظ كانت صحيحة. اتفقنا على أن اسم div لم يكن مفيدًا جدًا - فالعمل الذي قاموا به مؤخرًا أدى إلى إنشاء div آخر بنفس الاسم، ولكن على صفحة مختلفة. لقد تمت ملاحظة ذلك ولكن تم تأجيله حتى وصلت إلى هذه النقطة في الاختبار.

كانت المهارات التي يمتلكونها في NUnit ضرورية - الطريقة الأسهل للتحقق من هذا القسم هي استخدام أمر AreEqual. سمح هذا للاختبار بالتحقق من أن السلاسل متساوية. كان الكاتب المسرحي عنيدًا. لقد أرادت تحديد المواقع بدلاً من السلاسل - أو العكس - التي كانت صياغتها تستغرق الكثير من الوقت. وكنت سعيدًا بتعلم هذه التقنية – أستطيع أن أرى أنها مفيدة في المستقبل!

بعد عدة محاولات لتشغيل Nth()، لجأنا إلى استخدام فئة div الفردية - بعد التأكد من استخدامها هذه المرة فقط على الصفحة. لقد أعطانا ذلك نقطة بداية - الآن لمعرفة كيفية إدخال HTML هناك (لحسن الحظ، كان هذا هو الشيء الوحيد في هذا القسم المحدد). بعض البدايات الخاطئة الأخرى، وتخليت أخيرًا عن فكرة أن ContentAsync() لهذا القسم لن يعمل، مما قادهم إلى الحل الذي جربته وتجاهلته.

InnerHtmlAsync() أعطانا المحتويات الدقيقة لقسم div! المساحات وكل. وكانت تلك هي العقبة التالية – ولم يكن لدينا وقت للاجتماع. لقد كانوا على استعداد لإعطائي بضع دقائق إضافية، ولحسن الحظ، لأن هذه مشكلة قاموا بحلها من قبل. فقط بحاجة إلى بناء الجملة لإزالة المسافات: استبدل (" "، "") إذا كنت فضوليًا. وهذا يسمح بإجراء الاختبار، حتى توقفه PauseAsync() التالي الذي أضفته للتحقق اليدوي للحظة.

لقد ذهبوا لتناول الغداء، وقضيت الجزء التالي من الوقت في إعداد الملاحظات. كان لدي أشياء أخرى يجب أن أجدها - والآن لدي المزيد من الأدلة حول كيفية القيام بذلك.

بيان الافراج تم نشر هذه المقالة على: https://dev.to/arleneandrews/compare-html-in-playwright-net-4jfh إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3