NOT: 'tıklama' diyelim son kullanıcı tıklamasıdır. 'js tıklama' JS üzerinden tıklanır
Normal bir WebDriver tıklaması işe yaramadığında, "JavaScript aracılığıyla" tıklaması neden çalışıyor?
Bunun gerçekleşmesi için 2 durum vardır:
I. PhamtomJS kullanıyorsanız
O zaman bu en yaygın bilinen davranıştır PhantomJS
. Örneğin, bazı öğeler bazen tıklanamaz <div>
. Bunun nedeni PhantomJS
, tarayıcıların motorunu simüle etmek için orijinal yapılmış olmasıdır (ilk HTML + CSS -> hesaplama CSS -> oluşturma gibi). Ancak bu, bir son kullanıcının yolu olarak (görüntüleme, tıklama, sürükleme) etkileşime girmek anlamına gelmez. Bu nedenle PhamtomJS
, son kullanıcı etkileşimi ile yalnızca kısmen desteklenir.
JS CLICK NEDEN ÇALIŞIR? Her iki tıklama için de, hepsi ortalama tıklama. 1 namlulu ve 2 tetikli bir silah gibidir . Görüntü alanından biri, JS'den biri. Yana PhamtomJS
tarayıcının motorunu simüle büyük bir JS tıklama mükemmel çalışması gerekir.
II. "Tıklama" olay işleyicisi kötü zaman diliminde bağlanmalıdır.
Örneğin, bir <div>
-> Bazı hesaplamalar yapıyoruz
-> sonra tıklama olayını <div>
.
-> Artı bazı kötü açısal kodlamalarla (ör. Kapsamın döngüsünü düzgün şekilde ele almama)
Aynı sonuçla sonuçlanabiliriz. Tıklama çalışmaz çünkü WebdriverJS, tıklama olay işleyicisi olmadığında öğeyi tıklamaya çalışır.
JS CLICK NEDEN ÇALIŞIR? Js tıklama js'yi doğrudan tarayıcıya enjekte etmeye benzer. 2 yolla mümkündür,
İlk olarak devtools konsolu (evet, WebdriverJS, devtools'un konsoluyla iletişim kuruyor).
İkincisi , bir <script>
etiketi doğrudan HTML'ye enjekte etmektir .
Her tarayıcı için davranış farklı olacaktır. Ancak ne olursa olsun, bu yöntemler düğmeye tıklamaktan daha karmaşıktır. Tıklama zaten orada olanı kullanıyor (son kullanıcılar tıklıyor), js tıklama arka kapıdan geçiyor.
Ve js için tıklama eşzamansız bir görev olarak görünecektir. Bu, ' tarayıcı asenkron görevi ve CPU görev zamanlaması ' gibi karmaşık bir konu ile ilgilidir (bir süre önce okuyun, makaleyi tekrar bulamıyorum). Kısaca, bu çoğunlukla js tıklamasının CPU'nun görev zamanlaması döngüsünü beklemesi gerekeceğinden ve tıklama olayının bağlanmasından sonra biraz daha yavaş çalışacağından sonuçlanacaktır.
(Öğeyi bazen tıklanabilir, bazen tıklanabilir bulduğunuzda bu durumu anlayabilirsiniz.)
Bu tam olarak ne zaman oluyor ve bu geçici çözümün dezavantajı (varsa) nedir?
=> Yukarıda bahsedildiği gibi, her ikisi de tek bir amaç içindir, ancak hangi girişi kullanmakla ilgilidir:
- Tıklama: tarayıcının varsayılan olarak sağladığı şeyi kullanıyor.
- JS tıklama: arka kapıdan geçiyor.
=> Performans için, tarayıcılara dayandığı için söylemek zor. Ancak genel olarak:
- Tıklama: daha hızlı anlamına gelmez, ancak yalnızca CPU yürütme görevinin zamanlama listesinde daha yüksek bir konuma işaret etti.
- JS tıklaması: daha yavaş anlamına gelmez, sadece CPU görevinin zamanlama listesinin son konumunda oturum açtı.
=> Dezavantajlar:
- Tıklama: PhamtomJS kullanmanız dışında herhangi bir dezavantajı yok gibi görünüyor.
- JS tıklaması: sağlık için çok kötü. Görünümde olmayan bir şeye yanlışlıkla tıklayabilirsiniz. Bunu kullandığınızda, öğenin orada olduğundan ve son kullanıcının bakış açısı olarak görüntülenebilir ve tıklanabilir olduğundan emin olun.
PS, bir çözüm arıyorsanız.
- PhantomJS mi kullanıyorsunuz? Bunun yerine Chrome'u başsız kullanmanızı önereceğim. Evet, Chrome'u Ubuntu'da başsız olarak kurabilirsiniz. Şey, tıpkı Chrome gibi çalışır, ancak yalnızca bir görünüme sahip değildir ve PhantomJS gibi daha az hatalı.
- PhamtomJS kullanmıyor ama hala sorun mu yaşıyorsunuz? ExpectedCondition of Protractor ile kullanmanızı önereceğim
browser.wait()
( daha fazla bilgi için bunu kontrol edin )
(Kısaltmak istiyorum ama kötü sonuçlandı. Teori ile ilgili herhangi bir şeyi açıklamak karmaşıktır ...)