2014-09-18 117 views
4

交互我試圖執行下面的Selenium Web驅動程序腳本,但我得到org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with錯誤幾次(並非所有的時間)。有時在循環中第一次迭代,有時在2次迭代中,有時沒有開始循環。它打印所有可用的項目算錯,但乳清試圖點擊項目,它顯示Element is not currently visible...org.openqa.selenium.ElementNotVisibleException:元素當前不可見,因此可能不會與

public void pickitems() throws Exception 
     { 
     Webdriver driver = new firefoxdriver(); 
     driver.get("http://www.bigbasket.com"); 
     driver.manage().window().maximize(); 
      //Selecting Location 
     List<WebElement> list = driver.findElement(By.id("ftv-city-popup")).findElements(By.tagName("button")); 
     int location = r.nextInt(list.size()); 
     list.get(location).click(); 
      //Selection random Category from left panel through list 
     Thread.sleep(30000); 
     List<WebElement> xyz = driver.findElement(By.id("uiv2-main-menu")).findElements(By.className("top-category")); 
     System.out.println(xyz.size()); 
     Random r = new Random(); 
     int category = r.nextInt(xyz.size()); 
     xyz.get(category).click(); 


     for (int i = 0; i < 3; i++) { 
      Thread.sleep(30000); 
      List<WebElement> availableItems = driver.findElements(By.cssSelector("a.uiv2-add-button.a2c")); 
      System.out.println(availableItems.size()); 
      if (availableItems.size() > 0) 
      { 
       int selectItem = r.nextInt(availableItems.size()); 
       availableItems.get(selectItem).click(); 

      } 
      else 
      { 
       Thread.sleep(30000); 
       List<WebElement> availableItems2 = driver.findElements(By.cssSelector("a.uiv2-add-button.a2c")); 
       if (availableItems2.size() == 0) { 
        System.out.println("No more items are available. Sorry for the inconvenience"); 
       } 
       else { 
        Assert.fail("Unable to select items. May be page loading issue"); 
       } 


      } 

     } 

    } 

} 

回答

6

最後這對我有效。 元素當前不可見,因此可能不會與之交互。

最初它就像5次測試成功只有2次。不知道它是如何工作,有時不工作。

通過減少IE中的安全設置工作。啓用所有的ActiveX控件。也啓用腳本和IFRAMES。其中一些會警告將計算機置於危險之中,但這是我唯一的解決方案。在頁面加載需要時間的每個點使用presenceOfElementLocated而不是visibilityOfElementLocated引入顯式等待。

WebDriverWait wait = new WebDriverWait(driver,30); 
    wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='campaignListTable']"))); /*examining the xpath for a search  
    box*/ 
    driver.findElement(By.xpath("//*[@id='campaignListTable']")).sendKeys("TEXT"); /*enter text in search 
    box*/ 
6

不知道你的要求是什麼。但是,請牢記幾件事情。

  1. 硒可以找到符合同一標準的元素,但它們是隱藏
  2. 即使元素不是隱藏它可能不處於就緒狀態接受任何干預。

,如果你肯定知道的元素沒有被隱藏,那麼你可以使用下面的等待元素可見

new WebDriverWait(Driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible("your selector"); 
+0

感謝。這解決了我的問題。 – 2015-02-26 05:14:05

+0

@JakeW。很高興幫助你 – Saifur 2015-02-26 13:29:47

+0

你能幫我把這個命令轉換成JS嗎?我有同樣的問題,但我在Node.JS的量角器中使用。謝謝@Saifur – 2016-06-09 11:46:04

0

我猜你是想通過點擊超鏈接,如果你正在'ElementNotVisibleException'這意味着元素可能被隱藏。從左側面板選擇類別後,在UI上呈現定位器「a.uiv2-add-button.a2c」的元素是否需要很長時間?如果是,那麼交互與不可見元素總是會拋出'ElementNotVisibleException'

-1

只要把線程休眠一段密爾秒

Thread.sleep(5000); 
WebElement zoneName=driver.findElement(By.xpath("//*[@id=\"zoneName\"]")); 
zoneName.sendKeys("kandy"); 
0

對於某些瀏覽器碰巧一旦執行鼠標懸停動作,但在菜單列表很快消失之前硒確定下一子菜單項目。在這種情況下,最好在主菜單上使用perform()操作來保存菜單列表,直到Selenium識別子菜單項並點擊它爲止。

這裏

WebElement xWL = driver.findElement(By.xpath("x path text")); 

Actions xAct = new Actions(driver); 

取而代之的是:

xAct.moveToElement(xWL).build().perform(); 

下面的代碼將解決 「元素不可見」 的問題

xAct.moveToElement(xWL); 
xAct.click(); 
xAct.perform(); 
相關問題