java - ماهو - كيفية التعامل مع حوار الطباعة في السيلينيوم؟



ه سيلينيوم الالماني (4)

لا بد لي من التعامل مع الحوار الطباعة (نفس الذي يظهر عند النقر على CTRL-P في المتصفح). لقد حاولت مع:

Alert printDialog = driver.switchTo().alert();
printDialog.dismiss();

لكنها لم تنجح. أيضا لم أتمكن من التقاط مقبض النافذة ، لأنه ليس نافذة ...

هل من الممكن التعامل مع هذه الأشياء وكيف؟

https://code.i-harness.com


إجابة Slanec صحيحة - ليس لدى WebDriver إمكانيات محلية لهذا. طريقة حل هذه المشكلة في Windows هي مع كائن System.Windows.Forms.SendKeys:

    SendKeys.SendWait("^p");
    System.Threading.Thread.Sleep(500);
    SendKeys.SendWait("~");

    // give it a minute to spool onto the printer
    System.Threading.Thread.Sleep(5000);

لقد حصلت بالفعل على هذا في حلقة الطباعة خارج مجموعة من العبارات. يعمل كالسحر.


باستخدام Selenium و Facebook WebDriver مع Codeception ، واجهت نفس المشكلة - سينتهي تشغيل سيناريو الاختبار لأن مربع حوار الطباعة منع أي تفاعل مع الصفحة.

انتهى بي الأمر عدم فتح مربع حوار الطباعة في بيئة test (على سبيل المثال باستخدام Symfony و Twig):

{# Selenium can't interact with the OS native print dialog. #}
{# Therefore, it's disabled in the test environment. #}
{% if app.environment != 'test' %}
    $(document).ready(function () {
        var orderShouldBePrinted = window.location.href.indexOf(
            'print=true'
        ) !== -1;

        if (orderShouldBePrinted) {
            window.print();
        }
    });
{% endif %}

هذا لديه ميزة عدم إيقاف الاختبار. ومع ذلك ، لا يسمح باختبار ظهور مربع حوار الطباعة بالفعل.

كاختبار دخان ، أضفت $I->seeInCurrentUrl('print=true'); (لأن معلمة URL هذه تقوم بتشغيل window.print() ).


يمكن لـ CAN التعامل مع مربع حوار Print مع Selenium في Chrome. لست متأكدًا من المتصفحات الأخرى.

تمت إضافة الوصول إلى مربع الحوار Print في ChromeDriver-2.17. يمكن العثور على التفاصيل هنا: https://bugs.chromium.org/p/chromedriver/issues/detail?id=1087

انقر بزر الماوس الأيمن على مربع الحوار "طباعة" -> فحص العنصر. نتيجة لذلك ، سيتم فتح مربع الحوار DOM للطباعة في نافذة منفصلة. يمكنك الآن إنشاء محددات لأي عنصر في مربع الحوار واستخدامها في اختباراتك.

لإغلاق مربع حوار الطباعة ، يمكن القيام بما يلي:

//Switch to Print dialog
Set<String> windowHandles = driver.getWindowHandles();
if (!windowHandles.isEmpty()) {
    driver.switchTo().window((String) windowHandles.toArray()[windowHandles.size() - 1]);
}
//Now work with the dialog as with an ordinary page:  
driver.findElement(By.className("cancel")).click();

يمكنك ببساطة إغلاق المستعرض بعد ظهور مربع حوار الطباعة. من المسلم به أن هذا إجراء قاسٍ إلى حد ما ، لكن المزايا هي:

  • انها بسيطة
  • لا يتطلب أي أدوات خارجية
  • يعمل عبر أنظمة تشغيل ومتصفحات

اتصل وحسب:

myWebDriver.quit();

عادة ، يمكنك تشغيل الاختبار الخاص بك ، والتحقق من العناصر على الصفحة المراد طباعتها كالمعتاد. يمكن لـ WebDriver التحقق من عناصر الصفحة حتى إذا كان مربع حوار الطباعة مفتوحًا.

بمجرد الانتهاء من ذلك ، قم بإنهاء المتصفح (وأطلقه مرة أخرى للاختبار التالي).

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





webdriver