2017-11-08 6 views
0

아래의 테스트를 통해 요소의 개수를 반복 할 때 프레임에 드래그 된 모든 요소 떨어질 것입니다.셀 늄용 java에서 동일한 클래스 이름을 가진 모든 관련 객체를 클릭하기 위해 클래스 이름 반복하기

아래 코드를 작성하기 위해 getClass가 모든 요소를 ​​가져 오는 데 필요한 것 같습니다. getClass가 제거되면 두 요소 만 발견되고 더 많은 요소는 하나의 요소 만 삭제된다는 것입니다.

왜 "getClass"가 있어야하고 모든 요소가 클릭되도록 a.ui-icon.ui-icon-refresh의 전체 클래스를 가져 오는 다른 방법이 있는지 설명 할 수 있습니까? 모든

package Testing; 
import java.util.concurrent.TimeUnit; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.interactions.Actions; 
import java.util.Iterator; 
import java.util.List; 


public class Radiobuttons { 


     public static void main(String[] args) 
    { 
      // TODO Auto-generated method stub 
      System.setProperty("webdriver.chrome.driver","C://chromedriver.exe"); 
      WebDriver driver=new ChromeDriver(); 
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
      driver.get("https://jqueryui.com/droppable/"); 
      System.out.println(driver.getTitle()); 
      WebElement SimplePhotoManager = driver.findElement(By.xpath("//*[@id=\"content\"]/div[1]/ul/li[5]/a")); 
      SimplePhotoManager.click(); 
      driver.switchTo().frame(driver.findElement(By.xpath("//*[@id=\"content\"]/iframe"))); 
      WebElement source1 = driver.findElement(By.xpath("//*[@id=\"gallery\"]/li[1]")); 
      WebElement source2 = driver.findElement(By.xpath("//*[@id=\"gallery\"]/li[2]")); 
      WebElement source3 = driver.findElement(By.xpath("//*[@id=\"gallery\"]/li[3]")); 
      WebElement source4 = driver.findElement(By.xpath("//*[@id=\"gallery\"]/li[4]")); 
      WebElement targetBefore = driver.findElement(By.xpath("//*[@id=\"trash\"]")); 
      Actions a = new Actions(driver); 
      a.dragAndDrop(source1, targetBefore).build().perform(); 
      a.dragAndDrop(source2, targetBefore).build().perform(); 
      a.dragAndDrop(source3, targetBefore).build().perform(); 
      a.dragAndDrop(source4, targetBefore).build().perform(); 
      //Why is this required? 
      List<WebElement> getClass= driver.findElements(By.className("a.ui-icon")); 
      //Grab common attribute//Put into list and iterate 
      int count=driver.findElements(By.className("ui-icon-refresh")).size(); 
      System.out.println(count); 
      for(int i=0;i<count;i++) 
      { 
       driver.findElements(By.className("ui-icon-refresh")).get(i).click(); 
      } 

      //Close the thing 
      //driver.quit(); 
    } 


} 

답변

0

첫째, 당신은 여기에 명시 적으로 대기를 사용해야합니다 :

WebElement SimplePhotoManager = (new WebDriverWait(driver, 10)) 
       .until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id='content']/div[1]/ul/li[5]/a"))); 
     SimplePhotoManager.click(); 

가끔 요소가 클릭 할 수있는 예외를 가지고 있기 때문에.

List<WebElement> getClass= driver.findElements(By.className("a.ui-icon")); 

실제로 한 후,이 목록을 아무것도하지 않는 : 전화 문제에 관한

.

이유 때문에 "작동"다음이이 호출은 약간의 시간을 "손실"때문이고, 다음 호출에 있습니다 :

int count=driver.findElements(By.className("ui-icon-refresh")).size(); 

완전히 전체 목록 "을 참조하십시오"할 수 있습니다.

이를 확인하기 위해 삭제 된 요소를 명시 적으로 기다릴 수 있습니다. 예를 들어, 주먹 하나의 경우 :

WebElement first = (new WebDriverWait(driver, 10)) 
       .until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"trash\"]/ul/li[1]"))); 

그리고 계속하기를 기다리십시오.

마지막으로, 루프 내에서 당신은 항상 전화 :

driver.findElements(By.className("ui-icon-refresh")) 

그렇게 할 필요는 없습니다.

내부의 모든 요소를 ​​한 번만 반복하여 호출 할 수 있습니다.

전체 코드 :

 System.setProperty("webdriver.chrome.driver","C://chromedriver.exe"); 
     WebDriver driver=new ChromeDriver(); 
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
     driver.get("https://jqueryui.com/droppable/"); 
     System.out.println(driver.getTitle()); 
     WebElement SimplePhotoManager = (new WebDriverWait(driver, 10)) 
       .until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id='content']/div[1]/ul/li[5]/a"))); 
     SimplePhotoManager.click(); 
     driver.switchTo().frame(driver.findElement(By.xpath("//*[@id=\"content\"]/iframe"))); 
     WebElement source1 = driver.findElement(By.xpath("//*[@id=\"gallery\"]/li[1]")); 
     WebElement source2 = driver.findElement(By.xpath("//*[@id=\"gallery\"]/li[2]")); 
     WebElement source3 = driver.findElement(By.xpath("//*[@id=\"gallery\"]/li[3]")); 
     WebElement source4 = driver.findElement(By.xpath("//*[@id=\"gallery\"]/li[4]")); 
     WebElement targetBefore = driver.findElement(By.xpath("//*[@id=\"trash\"]")); 
     Actions a = new Actions(driver); 
     a.dragAndDrop(source1, targetBefore).build().perform(); 
     WebElement first = (new WebDriverWait(driver, 10)) 
       .until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"trash\"]/ul/li[1]"))); 
     a.dragAndDrop(source2, targetBefore).build().perform(); 
     WebElement second = (new WebDriverWait(driver, 10)) 
       .until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"trash\"]/ul/li[2]"))); 
     a.dragAndDrop(source3, targetBefore).build().perform(); 

     WebElement third = (new WebDriverWait(driver, 10)) 
       .until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"trash\"]/ul/li[3]"))); 
     a.dragAndDrop(source4, targetBefore).build().perform(); 
     //Why is this required? 
     WebElement fourth = (new WebDriverWait(driver, 10)) 
       .until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"trash\"]/ul/li[4]"))); 


     System.out.println("-----------------"); 

     //List<WebElement> getClass= driver.findElements(By.className("a.ui-icon")); 
     //Grab common attribute//Put into list and iterate 

     List<WebElement> wel= driver.findElements(By.className("ui-icon-refresh")); 
     int count= wel.size(); 
     System.out.println("-----------------"); 
     System.out.println(count); 

     for(WebElement we: wel) 
     { 
      we.click(); 
     }