打印列表中的所有已启用项目

时间:2016-12-28 00:17:00

标签: java selenium selenium-webdriver selenium-chromedriver selenium-ide

这就是我的代码所做的。  (1.)打开chrome浏览器并转到footlocker.ca  (2.)单击“男士”按钮  (3.)从60的列表中选择1个随机产品  (4.)打印产品名称和价格  (5.)打印所选产品的所有可用尺寸(avaSizes)  (6.)返回产品页面  (7.)从列表60中选择第二个随机产品  (8.)打印产品名称和价格  (9.)打印所选产品的所有可用尺寸(avaSizes)  (10.)关闭chrome浏览器

我的问题是它无法读取产品的可用尺寸。我认为我的问题是在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();
}

}

2 个答案:

答案 0 :(得分:4)

我看到dropdown元素有一个id并且是Select类型。 您可以使用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());
   }

答案 1 :(得分:1)

在上面的Marius 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.");
}