8

Odaklama olayının düzgün çalışmadığı bir ızgara üzerinde birden fazla selenyum firefox testi çalıştırırken fark ettim. Testlerimin her biri ayrı ayrı yürütüldüğünde ve işletim sisteminin odaklandığı zaman testlerin zamanın% 100'ünü geçtiğini onaylamıştım. Testleri Chrome ile paralel olarak da çalıştırdım ve sorunu göremedim.Selenyum Web Gezgini sırasında Çoklu Firefox Örnekleri Test odaklanmayı doğru şekilde gerçekleştirmiyor.

Her tarayıcıyı xvfb uygulamasının ayrı bir örneğinde başlatmayı öneren google gruplarında aşağıdaki iş parçacığını buldum. https://groups.google.com/forum/?fromgroups#!topic/selenium-developers/1cAmsYCp2ho%5B1-25%5D

Testin bir bölümü başarısız oluyor çünkü projede kullanılan jquery tarih seçiciden kaynaklanıyor. Tarih seçici, bir odaklama etkinliğinde başlatılır ve aynı anda yürütülen birden fazla selenyum testi olduğundan, webdriver testi .click() komutunu yürütür, ancak odak, tarih seçici widget'ının görünmesi için yeterince uzun kalmaz.

.focus (function() {$ input.trigger ("focus");}); By

    • jQuery timepicker addon: herkes önce görmüş ve bazı firefox profil ayarlarından bunu çözmüş eğer Trent Richardson [http://trentrichardson.com]

    Sorum şu. Bu konuda hiçbir etkisi olmayan aşağıdaki özelliği yüklemeyi denedim. etkinleştirilmiş ve Uzaktan Sürücü Firefox Profilinde yüklü o mülkle önce olduğu gibi

    profile.setAlwaysLoadNoFocusLib(true); 
    

    testi aynı şekilde başarısız olur.

    Odak olayının, zamanın% 100'ünü tetiklemesini veya odaklama için rekabet eden çoklu firefox tarayıcılarının sorununu çözmesini sağlamanın bir yoluna ihtiyacım var. Chrome'un bu sorunlardan hiçbirini göstermediği düşünüldüğünde, firefox'ta da bir hata olarak değerlendirilip değerlendirilemeyeceğini merak ediyorum.

    Teşekkürler!

  • +0

    Bu yüzden bazı önemli bilgileri kaçırdığımı gördüğüm sayfalar gibi görünüyor. Odak sorununu çözmek için Linux Grid sunucusunda firefox kurulumunuza yapmanız gereken bazı manüel şeyler var. Lib kurulmadı zaman setAlwaysLoadNoFocusLib (true) kullanmaya çalışırken neden bir istisna alamadım emin değilim! Şu anda baktığım iki bağlantı şunlardır: http://code.google.com/p/selenium/wiki/NativeEventsOnLinux http://code.google.com/p/selenium/wiki/FocusStealingOnLinux bir çözümü var gibi O gelmiyor Mac OSX için. – jjhughes57

    +0

    Yorumunuzu kendi sorunuzun cevabı olarak gönderebilir misiniz? Bu şekilde soru, arama sonuçlarında cevapsız olarak görünmez. – Potherca

    +0

    Evet, ya da sadece cevaplarınızı yokken yapabileceğiniz sorunuzu silin. – djangofan

    cevap

    -1

    Bunu sıkıştırabilir ve kontrolünüz altına alabilirsiniz. Önce pencere tanıtıcısı kimliğine göre açılır pencereyi tanımlamak için bir yöntem yazın. Daha sonra, pencereyi başka bir eylem gerçekleştirmeden önce odaklanmak için zorlamak için javascript'te "window.focus()" komutunu çalıştırmak için bir JavaScriptExecutor kullanın. Ardından, gerekiyorsa pencere tanıtıcı adıyla açılır pencereyi kapatabilirsiniz.

    2

    @djangofan: Yanlış. Odağı kilitleyemezsin. Odağı bir pencerede ve bir eylemi tetiklemeden önce istediğinizde, başka bir pencere odaklanmayı ister ve eyleminiz (giriş alanına giriş göndermek gibi) çalışmaz. Bu testlerimizde günde birkaç kez oldu. Yeniden üretilmesi zordu, çünkü her test çalışmasında farklı yerlerde başarısız oldu. Çözüm, her bir tarayıcıyı ayrı bir ekranda yürütmektir. Örneğin. Eğer Xvfb kullanabilirsiniz:

    Xvfb ... -screen 1 1200x800x24 -screen 2 1200x800x24 ... 
    

    Sonra bir tarayıcı başlattığınızda, bunun için ayrı bir ekran atayın:

    browser.setEnvironmentProperty("DISPLAY", ":N.1"); 
        browser.setEnvironmentProperty("DISPLAY", ":N.2"); 
        ... 
    
    +0

    Python'da DISPLAY değişkenini Firefox örneğine ayarlamak için şunu ekleyin: 'firefox.add_command_line_options ('- display =:' + str (display.display))' –

    +0

    Python örneği için teşekkürler. Bu bir Selenium Grid kullanarak nasıl çalışır? Bana öyle geliyor ki, bu ekran ayarı sadece testi xvfb'nin bulunduğu sunucuda çalıştırırsanız çalışır. Testi uzaktaki bir selenyum ızgara/hub/düğümü aracılığıyla çalıştırırsanız, sürücüyü Remote aracılığıyla yaratırsınız - komut satırı seçeneğini ayarlamak için orada kullanılacak FirefoxBinary yoktur. –

    0

    Ben Jenkins ile benim sürekli entegrasyon ortamında aynı sorunu yaşadım. Uzun bir araştırmadan sonra, bu problemlerden kaçınmak için new config flag'a yol açan bir old bug in firefox buldum.

    Çözüm, bu işaretin testlerin kullanacağı firefox profilinde etkinleştirilmesini sağlamaktır.Bayrağın focusmanager.testmode olduğunu doğru olarak ayarlayın.

    enter image description here

    açıklama odak olaylar firefox penceresi etkin olduğunda tetiklenir olmasıdır. Birden çok test çalıştırırsanız birden fazla pencereniz vardır, bu nedenle sadece etkin olan kişi odak olaylarını tetikler. Bu param ile aktif olmayan pencereler için bile olaylar tetiklenir.

    İlgili konular