0

이것은 내 코드의 기능입니다. (1.) 크롬 브라우저를 열고 footlocker.ca로 이동 (2.) Mens 버튼 (3.) 60 (4) 목록에서 1 임의 제품을 선택하십시오. 제품 이름과 가격을 인쇄하십시오. (5.) 제품 번호 (7) 목록에서 두 번째 무작위 제품을 선택하십시오 (8). 제품 이름을 인쇄하십시오 및 가격 (9.) 선택한 제품 (avaSizes) (10.)의 사용 가능한 모든 크기를 인쇄하십시오. 크롬 브라우저를 닫습니다목록 내의 모든 활성화 된 항목을 인쇄하십시오.

제 문제는 제품의 사용 가능한 크기를 읽지 못하는 것입니다. 나는 내 문제가 xpath에 있다고 생각하지만 다양한 xpath로 인해 문제가되는 코드가 될 수 있으므로 확실하지는 않습니다. 메서드가 호출됩니다 (avaSizes). 누군가 도움이된다면 위대 할 것입니다. 연습을 위해이 작업을 수행하고 있으므로이 코드에 추가 할 수있는 실시간 작업 시나리오 테스트 사례가있는 사람은 나에게 많은 도움이 될 것입니다. 감사.

public class FootlockerExample { 

WebElement next; 
WebDriver driver = new ChromeDriver(); 

public void productOne(){ 

    // Open Chrome Browser 
    System.setProperty("webdriver.chrome.driver", "C:\\Users\\Working\\Workspace\\SeleniumProject\\chromedriver.exe"); 

    // Open Footlocker website and maximize window 
    driver.get("http://www.footlocker.ca/"); 
    driver.manage().window().maximize(); 

    // Find button element 'Mens' and click 
    next = driver.findElement(By.xpath("//*[@id='global-nav']/ul/li[1]/a")); 
    next.click(); 

    // Select a random product 
    selectRandomProduct(); 

    // Print out the product name and price 
    String productName = driver.findElement(By.xpath("//*[@id='product_form']/div/span[2]/div/div[1]")).getText(); 
    String Price = driver.findElement(By.xpath("//*[@id='product_form']/div/span[2]/div/div[2]")).getText(); 
    System.out.println("The 1st randomly selected product is " + productName + " and it's cost is " + Price + "."); 

    // Print all available product sizes 
    avaSizes(); 

    // Execute new method 
    productTwo(); 
} 

public void productTwo(){ 

    // Go back a browser page 
    driver.navigate().back(); 

    // Select a new random product 
    selectRandomProduct(); 

    // Print out the product name and price 
    String productName = driver.findElement(By.xpath("//*[@id='product_form']/div/span[2]/div/div[1]")).getText(); 
    String Price = driver.findElement(By.xpath("//*[@id='product_form']/div/span[2]/div/div[2]")).getText(); 
    System.out.println("The 2nd randomly selected product is " + productName + " and it's cost is " + Price + "."); 

    // Print all available product sizes 
    avaSizes(); 

    driver.close(); 
} 

public void selectRandomProduct(){ 

    // Find and click on a random product 
    List<WebElement> allProducts = driver.findElements(By.xpath("//*[@id='endecaResultsWrapper']/div[3]//img")); 
    Random rand = new Random(); 
    int randomProduct = rand.nextInt(allProducts.size()); 
    allProducts.get(randomProduct).click(); 
} 

public void avaSizes(){ 

    // Find all the available shoe sizes for each randomly selected product 
    List<WebElement> avaSizes = driver.findElements(By.xpath("//*[@id='product_sizes']")); 
    int totalSizes = 0; 
    for(int i=0; i<avaSizes.size(); i++){ 
     if(avaSizes.get(i).isEnabled()==true){ 
      avaSizes.get(i).getText(); 
      System.out.println(avaSizes); 
      totalSizes++; 
     }else{ 
      System.out.println("Out of stock in all sizes."); 
     } 
    } 
    System.out.println("This product is available in: " + totalSizes + " sizes."); 
} 

public static void main(String[] args) { 

    FootlockerExample obj1 = new FootlockerExample(); 
    obj1.productOne(); 
} 

}

+0

당신은 HTML 코드를 게시 할 수 있습니까? –

+0

@ShubhasmitGupta Marius D.의 도움으로 문제를 해결했습니다. 로직에 코드를 추가하면 작동합니다. 그러나 도와 줘서 고마워. –

답변

1

를 마리우스 D의 도움으로 위, 내가 문제를 파악하고 내 코드를 해결했습니다. 누군가가 같은 문제에 갇혀있는 경우를 대비하여 다음은 내 고정 답변입니다.

public void avaSizes(){ 
    Select select = new Select(driver.findElement(By.id("product_sizes"))); 
    // Find all the available shoe sizes for each randomly selected product 
    List<WebElement> avaSizes = select.getOptions(); 
    int totalSizes = 0; 
    for(WebElement size:avaSizes){ 
     if(size.isEnabled()==true){ 
      System.out.println(size.getText()); 
      totalSizes++; 
      }else{ 
       System.out.println("Out of stock in " + size.getText()); 
       } 
     } 
    System.out.println("This product is available in: " + totalSizes + " sizes."); 
} 
4

나는 드롭 다운 요소가 ID를 가지고 있으며, 선택 유형 인 것을 알 수있다. 당신은 그것이 Select 개체를 사용하여 작업 할 수 있습니다 :

Select select = new Select(driver.findElement(By.id("product_sizes")));  
List<WebElement> availableSizes = select.getOptions(); 

    for (WebElement size : availableSizes) { 
     System.out.println(size.getText()); 
    } 
+0

활성화 된 크기 만 인쇄하면됩니다. ShoeA에는 크기가 9,10,11,12,13이되지만 10, 12에 대해서만 사용 가능하거나 재고가 있으므로 선택 태그 아래의 모든 옵션을 가져 오는 대신 10, 12를 인쇄해야합니다. 이 코드에서 볼 수 있듯이 모든 크기를 출력하고, 옵션을 사용할 수 없는지 여부에 관계없이 고려하지 않습니다. –

관련 문제