我的代码仅从产品页面中选择第一项的值

My code picks the value of only first item from product page

我想获取折扣、原价、折扣价等商品的价值,然后通过计算检索折扣价,并与我获得的网站上的折扣价进行比较。但我面临的问题是我的代码只选择产品页面第一项的值。

new WebDriverWait(driver,10).until(ExpectedConditions.elementToBeClickable(By.xpath("/html/body/div[3]/div[1]/div/div[2]/div/div/div/nav/ul/li[1]/ul/li[6]/a"))).click();
Thread.sleep(1000);
ArrayList<WebElement> a = (ArrayList<WebElement>) driver.findElements(By.xpath("//div[@class='price']/div[@class='onsale']"));

ArrayList<WebElement> b = (ArrayList<WebElement>) driver
        .findElements(By.className("was"));

ArrayList<WebElement> c = (ArrayList<WebElement>) driver
        .findElements(By.xpath("//div[@class = 'sale-item icn']"));
List<Float> aaaa = new ArrayList<Float>();
List<Float> bbbb = new ArrayList<Float>();
List<Float> cccc = new ArrayList<Float>();
System.out.println(a.size() + " " + b.size() + " " + c.size());


for (int i = 0; i < a.size(); i++) {
    String[] aaa = a.get(i).getText().replaceAll(",", "").split("\.");
    System.out.println(aaa[1] + "." + aaa[2]);
    aaaa.add(Float.parseFloat(aaa[1] + "." + aaa[2]));
    System.out.println(aaaa.get(i));

    String[] bbb = b.get(i).getText().replaceAll(",", "").split("\.");
    System.out.println(bbb[1] + "." + bbb[2]);
    bbbb.add(Float.parseFloat(bbb[1] + "." + bbb[2]));
    System.out.println(bbbb.get(i));

    String[] ccc = c.get(i).getText().replaceAll("NEW ARRIVAL", "20").split("\%");
    System.out.println(ccc[0]);
    cccc.add(Float.parseFloat(ccc[0]));
    System.out.println(cccc.get(i));

    float off_cal = bbbb.get(i) - (bbbb.get(i) * cccc.get(i)) / 100;
    System.out.println(off_cal);
    WebElement selitem = wait.until(ExpectedConditions
            .elementToBeClickable(By.xpath("/html/body/div[3]/div[2]/div/div/div[8]/div[1]/div[2]")));
    selitem.click();
    Thread.sleep(2000);

    if (off_cal == aaaa.get(i)) {
        System.out.println("matched");
        WebElement addcart1 = wait.until(ExpectedConditions.elementToBeClickable(
                By.xpath("/html/body/div[3]/div[2]/div[1]/div/section[1]/div[2]/div/form/div[10]/input[2]")));
        addcart1.click();
        Thread.sleep(2000);
        System.out.println("Product added to cart");
        WebElement notification_close = wait
                .until(ExpectedConditions.elementToBeClickable(By.id("pn-optin-disallow-btn-text")));
        notification_close.click();

我稍微更新了你的代码:

package selenium;

import java.util.ArrayList;
import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

public class Zaman10 extends WebDriverBase {

    public static void main(String[] args) throws InterruptedException {
        
        WebDriver driver = startChromeDriver(); // standard chromedriver setup
        
        driver.get("https://focusclothing.pk/collections/men-gym-wear");        
        dismissSubPopup();      
        
        List<WebElement> a = driver.findElements(By.xpath("//div[@class='price']/div[@class='onsale']"));
        List<WebElement> b = driver.findElements(By.className("was"));
        List<WebElement> c = driver.findElements(By.xpath("//div[@class = 'sale-item icn']"));
        
        List<Float> aaaa = new ArrayList<Float>();
        List<Float> bbbb = new ArrayList<Float>();
        List<Float> cccc = new ArrayList<Float>();
        
        System.out.println(a.size() + " " + b.size() + " " + c.size());

        for (int i = 0; i < a.size(); i++) {
            String[] aaa = driver.findElements(By.xpath("//div[@class='price']/div[@class='onsale']")).get(i).getText().replaceAll(",", "").split("\.");
            String aa = aaa[1] + "." + aaa[2];
            System.out.println(aa);
            aaaa.add(Float.parseFloat(aa));
            System.out.println(aaaa.get(i));

            String[] bbb = driver.findElements(By.className("was")).get(i).getText().replaceAll(",", "").split("\.");
            String bb = bbb[1] + "." + bbb[2];
            System.out.println(bb);
            bbbb.add(Float.parseFloat(bb));
            System.out.println(bbbb.get(i));

            String[] ccc = driver.findElements(By.xpath("//div[@class = 'sale-item icn']")).get(i).getText().replaceAll("NEW ARRIVAL", "20").split("\%");
            System.out.println(ccc[0]);
            cccc.add(Float.parseFloat(ccc[0]));
            System.out.println(cccc.get(i));

            float off_cal = bbbb.get(i) - (bbbb.get(i) * cccc.get(i)) / 100;
            System.out.println(off_cal);
            
            WebElement productLoop = driver.findElement(By.id("product-loop"));
            List<WebElement> products = productLoop.findElements(By.xpath(".//div[@class='reveal vertical-images']"));
            products.get(i).click();
            WebElement addToCart = driver.findElement(By.xpath("//*[@id=\"AddToCartForm\"]/div[10]/input[2]"));

            if (off_cal == aaaa.get(i)) {
                System.out.println("matched");
                addToCart.click();
                System.out.println("Product added to cart");
            }
            driver.get("https://focusclothing.pk/collections/men-gym-wear");        
            dismissSubPopup();
        }
        driver.quit();
    }
    
    public static void dismissSubPopup() throws InterruptedException {
        Thread.sleep(8000);
        List<WebElement> closeButtons = driver.findElements(By.xpath("/html/body/div[4]/div/div[2]/div[4]/div/div/button"));
        if (closeButtons.size() > 0) {
            closeButtons.get(0).click();
        }
    }
}

得到这个输出:

Starting ChromeDriver 91.0.4472.101 (af52a90bf87030dd1523486a1cd3ae25c5d76c9b-refs/branch-heads/4472@{#1462}) on port 12891
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
Čvc 14, 2021 9:50:31 DOP. org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
17 17 17
976.50
976.5
1395.00
1395.0
30
30.0
976.5
matched
Product added to cart
836.50
836.5
1195.00
1195.0
30
30.0
836.5
matched
Product added to cart
836.50
836.5
1195.00
1195.0
30
30.0
836.5
matched
Product added to cart
1256.50
1256.5
1795.00
1795.0
30
30.0
1256.5
matched
Product added to cart
836.50
836.5
1195.00
1195.0
30
30.0
836.5
matched
Product added to cart
976.50
976.5
1395.00
1395.0
30
30.0
976.5
matched
Product added to cart
976.50
976.5
1395.00
1395.0
30
30.0
976.5
matched
Product added to cart
847.50
847.5
1695.00
1695.0
50
50.0
847.5
matched
Product added to cart
836.50
836.5
1195.00
1195.0
30
30.0
836.5
matched
Product added to cart
836.50
836.5
1195.00
1195.0
30
30.0
836.5
matched
Product added to cart
836.50
836.5
1195.00
1195.0
30
30.0
836.5
matched
Product added to cart
847.50
847.5
1695.00
1695.0
50
50.0
847.5
matched
Product added to cart
847.50
847.5
1695.00
1695.0
50
50.0
847.5
matched
Product added to cart
976.50
976.5
1395.00
1395.0
30
30.0
976.5
matched
Product added to cart
976.50
976.5
1395.00
1395.0
30
30.0
976.5
matched
Product added to cart
847.50
847.5
1695.00
1695.0
50
50.0
847.5
matched
Product added to cart
1186.50
1186.5
1695.00
1695.0
30
30.0
1186.5
matched
Product added to cart