爪哇硒巨大的循环列表



>我必须在我们的网站后台循环显示1080个客户列表,并浏览每个客户信息页面并进行更改,然后返回客户列表。有 55 个客户页面,每页显示 20 个客户。

我的程序每次在 7xx 客户左右卡住。也许内存已满,无法再处理,或者服务器不再应答。我认为这与循环有关。这是代码:

public class GroupCustom {
public static void main(String[] args) {

ChromeOptions options = new ChromeOptions();
//options.addArguments("--headless");
//options.addArguments("test-type", "ignore-certificate-errors", "window-size=1200,1100");
ChromeDriver driver = new ChromeDriver(options);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();

String login = "xxxxxxxxxx";
String password = "xxxxx";
int compt = 0;

//connect to backoffice GFC and access customer list
driver.get(url);
driver.findElement(By.id("email")).sendKeys(login);
driver.findElement(By.id("passwd")).sendKeys(password);
driver.findElement(By.name("submitLogin")).click();
driver.findElement(By.xpath("//table[@class='table group']/tbody/tr[@class=' '][2]/td[@class='text-right']/div[@class='btn-group-action']/div[@class='btn-group pull-right']/button[@class='btn btn-default dropdown-toggle']")).click();
driver.findElement(By.xpath("//table[@class='table group']/tbody/tr[@class=' '][2]/td[@class='text-right']/div[@class='btn-group-action']/div[@class='btn-group pull-right open']/ul[@class='dropdown-menu']/li[1]/a")).click();

循环55 页的客户行,每个页面循环 50 个客户

for(int j = 1; j<= 55;j++)
{
int customNumbers = driver.findElements(By.xpath("//form[@id='form-customer_group']/div[@class='panel col-lg-12']/div[@class='table-responsive-row clearfix']/table[@class='table customer_group']/tbody/tr")).size();

for(int i = 1; i <= customNumbers; i++)
{
driver.findElement(By.xpath("//table[@class='table customer_group']/tbody/tr["+i+"]/td[@class='text-right']/div[@class='btn-group pull-right']/a[@class='edit btn btn-default']")).click();
Select selectOrderState = new Select(driver.findElement(By.id("id_default_group")));
selectOrderState.selectByVisibleText("Client VIP");
driver.findElement(By.xpath("//div[@id='fieldset_0']/div[@class='panel-footer']/button[@id='customer_form_submit_btn']/i[@class='process-icon-save']")).click();
compt++;
System.out.println("le client n°" +compt+" a été changés en VIP");                                          
}
driver.findElement(By.xpath("//form[@id='form-customer_group']/div[@class='panel col-lg-12']/div[@class='row']/div[@class='col-lg-6'][2]/ul[@class='pagination pull-right']/li/a[@class='pagination-link']/i[@class='icon-angle-right']")).click();
}

JOptionPane.showMessageDialog(null, "L'action est terminée, "+compt+" clients ont été changés en VIP");
driver.quit();
}

}

我认为代码没有优化。如果有人可以帮助我,将不胜感激。提前感谢您的帮助。

在你j<=55的大for中,你可以直接把所有的.../tr放在一个列表中。

之后,在列表中的每个元素中使用findelement。

List<WebElement> listElems = driver.findElements(By.xpath("//form[@id='form-customer_group']/div[@class='panel col-lg-12']/div[@class='table-responsive-row clearfix']/table[@class='table customer_group']/tbody/tr"));
for(WebElement aux : listElems)
{
aux.findElement(By.xpath("./td[@class='text-right']/div[@class='btn-group pull-right']/a[@class='edit btn btn-default']")).click();
Select selectOrderState = new Select(driver.findElement(By.xpath("//*[@id = 'id_default_group']")));
selectOrderState.selectByVisibleText("Client VIP");
driver.findElement(By.xpath("//div[@id='fieldset_0']/div[@class='panel-footer']/button[@id='customer_form_submit_btn']/i[@class='process-icon-save']")).click();
compt++;
System.out.println("le client n°" +compt+" a été changés en VIP");                                          
}
driver.findElement(By.xpath("//form[@id='form-customer_group']/div[@class='panel col-lg-12']/div[@class='row']/div[@class='col-lg-6'][2]/ul[@class='pagination pull-right']/li/a[@class='pagination-link']/i[@class='icon-angle-right']")).click();

我只使用 By.xpath(( 重新命令;

最新更新