2013-10-28 33 views
6

Aşağıdaki sorunu yaşıyorum. Bu benim seçim'dirJava webdriver: Öğe görünür istisnai değil

org.openqa.selenium.ElementNotVisibleException: element not visible: Element is not currently visible and may not be manipulated 
    (Session info: chrome=30.0.1599.101) 

:

Select s = new Select(dropDown); 
s.selectByVisibleText("CHARGEBACK"); 

işlemek için çevresinde bir yürüyüş var mı ben Seç yapmak ve ben aşağıdaki hatayı alıyorum testi çalıştırdığınızda böylece gizli bir açılır menü var gizli öğeler? Bu html kodu

JavascriptExecutor jse = (JavascriptExecutor) driver; 
jse.executeScript("arguments[0].scrollIntoView(true);", element); 

:

<div class="ui-helper-hidden"> 
<select id="formLevel:levels_input" name="formLevel:levels_input"> 
<option value="541fac58-5ea8-44ef-9664-e7e48b6c6a3c">Seleccione un Registro</option> 
<option value="dafc799c-4d5e-4b02-a882-74cb6ad98902">SECURITY</option> 
<option value="e5416086-2036-4cd0-b23e-865747aa3f53">CALL CENTER</option> 
<option value="7ea4b4ea-4f06-4d27-9541-1b0cf3f2aa22">CHARGEBACK</option> 
<option value="0f915120-7b8f-4a33-b063-5d20a834b655">PREVENÇÃO A FRAUDE</option> 
<option value="a8ef13e8-f4a5-43b8-a668-b769f6988565">ANALISE DE CREDITO</option> 
<option value="83b65a26-d4cd-43d3-b3fa-2f7894ca454a">SUPORTE A CONTA</option> 
<option value="163d0db9-590c-47a7-a271-218b2d27d8d9">REGULARIZAÇÃO FINANCEIRA</option> 

Ve bu durumda çalışmıyor ben mesajların birinde aşağıdaki kodu bulundu. Herhangi bir yardım takdir edilecektir.

+5

Niçin geçerli bir sınama durumu yapmıyorsunuz, örneğin. 'Bunu tıklatın, sonra eleman görünür olduğunda açılır menüyü değiştirin 'Kullanıcıların bunu yapmayacağı gibi gizli öğeleri değiştirmek için kötü bir test mantığıdır. – sircapsalot

+0

Ayrıca, öğenin görünür olması ve bu hatayı atması gerekiyorsa, seçicinizi kontrol ederim. Yanlış elemanı seçiyor olabilirsiniz. –

+0

Seçici, öğeyi bulabildiğim için iyi, ancak seçeneği seçemiyorum. P.S, html kodunu ekledi. – elcharrua

cevap

7

WebDriver yana çalışır deneyin. Sorununuzu çözmek için, ilk önce div'u tıklamanız gerektiğini ve bu sayede açılır menüyü görünür hale getirip açılır menüden bir seçenek seçmeniz gerektiğini düşünüyorum. Gerçek bir kullanıcıyı simüle edeceğinden, saf Javascript yolunun aksine böyle bir yaklaşımı öneriyorum. triggerDropDown

+0

Bu cevaba katılıyorum. Bu tür bir etkileşim üzerinde bir FluentWait (göz ardı eden istisnalar) kullanmanız gerekmeyecektir (çünkü div tıklamasının hemen beklenen bir sonucu vardır) ve bu nedenle WebDriverWait bu bağlamda mükemmeldir. – djangofan

0

Bunu test etmedim, ancak aşağıdakiler çalışıyor mu?

s.selectByValue ("7ea4b4ea-4f06-4d27-9541-1b0cf3f2aa22");

0

Kesinlikle sircapsalot'a katılıyorum. Uygulama iş mantığını tutmalı ve "bir kullanıcı gibi" yapmalısınız. Ve bu hack sadece geçici çözümler için kullanın.

Cevap:

o gizli/görünmez öğelerle etkileşimde olamaz, gerçek kullanıcıların simüle etmek bu yolu

document.getElementById('formLevel:levels_input').options[3].selected = "true"

6

Merhaba sınıf adını güncellenmiş

WebDriverWait wait = new WebDriverWait(driver, 300); 
WebElement triggerDropDown = driver.findElement(By 
       .className("ui-helper-hidden")); 
triggerDropDown.click(); 
WebElement selectElement = wait.until(ExpectedConditions 
        .visibilityOfElementLocated(By.id("formLevel:levels_input"))); 
Select select = new Select(selectElement); 
select.selectByVisibleText("SECURITY"); 

Düzenleme Bunun pek çok nedeni olabilir, topu iyi takip verin. Bu sayıyla da defalarca karşılaştım ve farklı yollarla çözdüm. Ayrıca xpath yollarını kullanarak benzersiz xpath- kullanma

2- beklemek gibi açık biliyorum WebdriverWait kullanma

1-.

3- Boyut öğesinin boyutunu alın ve sonra ilk harekete tıklayın veya herhangi bir eylemi gerçekleştirin.

Daha önce cevapları tarafından gündeme nedenleri ve sorunların yanı sıra burada How to Solve Element not visible Exception

0

tüm çözüm belgelenmiş, ben kayda değer başka bir nedeni karşılaştı. Benim durumumda, sayfada erişmek istediğim öğeler görünür hale gelmek için sayfadaki bir bağlantıyı tıkladıktan sonra sayfadaki bir JavaScript'in çalışması gerekiyordu. Sürücünüz Javascript etkin sahip olduğu sürece, bu ok. Benim durumumda, JavaScript olmadan koşuyordum, bu yüzden bağlantı programlı olarak "tıklandı" olsa bile, öğeler görünmüyordu. Varsayılan ayarlarla HtmlUnitDriver kullanıyordum.Sonunda ChromeDriver'a geçtim. (JavaScript'i HtmlUnitDriver'dan etkinleştirebilirsiniz, ancak bu - diğer nedenlerden dolayı - benim durumumda benim için yeterli değildi.)

İlgili konular