2016-04-08 12 views
2

Google web tarayıcısını, sayfadaki tarayıcıya ait olmayan bir öğeye nasıl taşıyabilirim? Öğe sayfada bulunur ve görüntülenir, ancak öğenin sayfanın alt kısmında görünmesi ve tarayıcının öğeyi görüntüye getirmek için aşağı kaydırması gerekebilir. Bir öğe sayfasında ve muhtemelen en altında görünümünde değilseTarayıcı penceresinde görünmeyen geb sayfası içeriğine nasıl taşınır?

import geb.Page 
class myPage extends Page { 
    static url = "mypage.xhtml" 
    static at = {title == "myPage"} 
    static content = { 
    someElement = {$("#bottomOfPage")} 
    anotherElement = {$(".someClass",5)} 
    } 

    void clickElement(){ 
    //possibility to fail because element may not be displayed in browsers view 
    //if not in view, scroll to element, then click 
    someElement.click() 
    } 
} 

, örnek olarak bu sayfayı kullanarak, nasıl görünüme eleman getirmek için webdriver söyleyebilir? Sayfa içeriği görünmediğinde başarısız olan bazı karmaşık testlerim var. Bazı durumlarda, sürücü görüş alanında olmasa bile öğeye geçecektir. Ancak, sürücüye, kendi başına hareket etmediği durumlar için değilse, bir öğeye geçmesini açıkça belirtmek isterim.

Selenyum kitaplığı bir moveToElement() işlevine sahiptir, ancak yalnızca WebElement sınıfının nesnelerini kabul eder. Gebeleri kullanarak, sayfa sınıfları oluştururken, testlerimde kullanılan tüm öğeler içerik bölümünde bildirilir ve dolayısıyla SimplePageContent sınıfıdır. SimplePageContent, bir WebElementine de dönüştürülemez. moveToElement(By.id("bottomOfPage")) işe yarıyor, ancak ideal değil çünkü sert kodlanmış değerler istemiyorum. Mümkünse sayfa içerik nesnesinin kendisini çok fazla geçirin.

+0

: Bir interact {} blok kullanın - Navigator s WebElement s ayıklanması gerek olmayacak basit bir yolu da vardır

. Yöntem, nesneyi aşağı kaydırmak için JS'yi yürütmek üzere JavaScriptExecutor'ı kullanacaktır. [Bu gönderideyken aşağı/yukarı kaydırma NASIL'a bakın (http://stackoverflow.com/questions/12293158/page-scroll-up-or-down-in-selenium-webdriver-selenium-2-using-java) – Buaban

cevap

3

Deneyimlerimden, WebDriver'ı şu anda görüş alanında olmayan bir öğeye tıklatması için sorduğunuzda, önce bu öğeye kaydırılacağını ve ardından üzerine tıklayabileceğini söyleyebilirim. Yani ya olmuyorsa bir çeşit hata yapıyorsunuz ya da öğenin görünmüyor olması, öğenizin tıklanmamasına neden olan şey değil.

yine de doğrudan o zaman kolayca nesneleri onlar ilk almak istiyorsanız kullanmanız gereken hangi bir firstElement() ile gelir Navigator uygulamak gerçeğini kullanarak içerik tanımından döndü açabilirsiniz Actions.moveToElement() kullanarak elemana taşımak istiyorsanız NavigatorWebElement ürününüzün WebElement numaralı Navigator veya singleElement() numaralı telefonların bir WebElement numaralı telefonuna sahip olması durumunda. Ben sayfanızın nesne sınıflarında bir yöntem moveToElement eklemek zorunda düşünüyorum

interact { 
    moveToElement(someElement) 
} 
+0

hmm Görüntülemiş olduğunuz bir öğeye tıklamayı denemek için hızlı bir test yaptım ve haklısınız. Öğeye kayar ve tıklanır. Bir metin alanına da bir değer girme konusunda benim soruma bir örnek vermeliydim. Koduma geri baktım ve bir metin kutusu görünmüyorsa, bir değer girmeyecek ve bu yüzden testi başarısız olacak. {} Etkileşimini kullanarak ilgilenmiştim, ancak her zaman "moveToElement" sembolünü çözemiyorum ". İçe aktarılması gereken bir şey var mı? – WontonJon

+0

Yine, metin kutusunun görünümde olmaması, metnin kendisine girmesini engellememelidir. Metin kutusuyla ilgili özel bir şey var mı? Değerin metin kutusuna yerleştirilmediğinden emin misiniz? Sorunuzla ilgili sorularınızı yanıtlayın - aldığınız tam stacktrace nedir? Nasıl kullanıyorsun? Test, sayfa veya modülde mi? – erdi

+0

Yığın izleme hataları almıyorum. öğeler sadece metin kutuları olan giriş alanlarıdır. Testim bir formu doldurur. Tarayıcı penceresinde görünen metin kutuları, değerleri almaz, ancak tarayıcı görünümünde olmayan ve doldurulmayan metin kutularını alır. Kesme noktalarını kullanırken bile doldurduklarını gösterir. Sanki atlanıyorlarmış gibi. Eylemler'i kullanarak bir yardımcı işlev oluşturmayı bitirdim.inatçı metin kutularına açıkça taşımak için moveToElement() yöntemi ve bu işe yaradı. Bu gerçekten garip bir lol. Şimdilik bu makul bir çözümdür. – WontonJon

İlgili konular