Java 选择多个选项,选择值将来自Excel

Java 选择多个选项,选择值将来自Excel,java,excel,selenium,selenium-webdriver,Java,Excel,Selenium,Selenium Webdriver,我试图做的是在按住CTRL键的同时从这个示例站点中选择多个选项 但是,多个选择值将来自excel,这意味着如果excel行在不同的行(在同一列中)上分别有蘑菇、洋葱和橄榄等值,它将在页面中逐个选择这些值。Excel文件如下所示: 这是我到目前为止得到的代码 package mineP; import java.io.File; import java.io.FileInputStream; import java.util.List; import org.apache.poi.xssf

我试图做的是在按住CTRL键的同时从这个示例站点中选择多个选项

但是,多个选择值将来自excel,这意味着如果excel行在不同的行(在同一列中)上分别有蘑菇、洋葱和橄榄等值,它将在页面中逐个选择这些值。Excel文件如下所示:

这是我到目前为止得到的代码

package mineP;

import java.io.File;
import java.io.FileInputStream;
import java.util.List;

import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class Various {

    public static void main(String[] args) throws Exception{

                File src = new File("C:\\Users\\Documents\\myP2.xlsx");

                // Load file
                FileInputStream fis = new FileInputStream(src);

                // Load WB
                XSSFWorkbook wb = new XSSFWorkbook(fis);

                // Load Sheet

                XSSFSheet sh1 = wb.getSheetAt(0);



        String chromePath = "C:\\Users\\chromedriver.exe";
        System.setProperty("webdriver.chrome.driver", chromePath);



        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();

        driver.get("http://www.htmlcodetutorial.com/forms/_SELECT_MULTIPLE.html");


        WebElement sel = driver.findElement(By.xpath("//select[@name='toppings']"));

        List<WebElement> alloptions = sel.findElements(By.xpath("//select[@name='toppings']//option"));

        for (WebElement option: alloptions) {

            String optTxt = option.getText();

            //System.out.println(optTxt);

            if (optTxt.contains(sh1.getRow(3).getCell(1).getStringCellValue())){

                option.click();
            }

        }



    }
}
packageminep;
导入java.io.File;
导入java.io.FileInputStream;
导入java.util.List;
导入org.apache.poi.xssf.usermodel.xssfheet;
导入org.apache.poi.xssf.usermodel.xssf工作簿;
导入org.openqa.selenium.By;
导入org.openqa.selenium.WebDriver;
导入org.openqa.selenium.WebElement;
导入org.openqa.selenium.chrome.ChromeDriver;
各类公共课{
公共静态void main(字符串[]args)引发异常{
文件src=新文件(“C:\\Users\\Documents\\myP2.xlsx”);
//加载文件
FileInputStream fis=新的FileInputStream(src);
//加载WB
XSSF工作簿wb=新XSSF工作簿(fis);
//负载表
XSSFSheet sh1=wb.getSheetAt(0);
字符串chromePath=“C:\\Users\\chromedriver.exe”;
System.setProperty(“webdriver.chrome.driver”,chromePath);
WebDriver驱动程序=新的ChromeDriver();
driver.manage().window().maximize();
驱动程序。获取(“http://www.htmlcodetutorial.com/forms/_SELECT_MULTIPLE.html");
WebElement sel=driver.findElement(By.xpath(//select[@name='toppings']);
List alloptions=sel.findElements(By.xpath(//select[@name='toppings']//option”);
for(WebElement选项:alloptions){
String opttext=option.getText();
//System.out.println(opttext);
if(optText.contains(sh1.getRow(3.getCell(1.getStringCellValue())){
选项。单击();
}
}
}
}

我想做的是,只要excel中有一个值,它就会在excel和网站中的选项之间循环,并继续使用CTRL键选择所有选项,这些选项的文本值位于excel中,就像真正的用户一样,您可以按住CTRL键并单击每个元素:

WebDriver driver = new FirefoxDriver();
driver.get("http://www.htmlcodetutorial.com/forms/_SELECT_MULTIPLE.html");
List<WebElement> options = driver.findElements(By.xpath("//select[@name='toppings']//option"));

// Values to select
List<String> values =  Arrays.asList("onions", "olives");

// Select all the options
Actions act = new Actions(driver);
act.keyDown(Keys.CONTROL);
for (WebElement option: options){
    if(values.contains(option.getText())) {
        act.click(option);
    }
}
act.keyUp(Keys.CONTROL);
act.perform();

driver.quit();
WebDriver=newfirefoxdriver();
驱动程序。获取(“http://www.htmlcodetutorial.com/forms/_SELECT_MULTIPLE.html");
List options=driver.findElements(By.xpath(//select[@name='toppings']//option”);
//要选择的值
列表值=array.asList(“洋葱”、“橄榄”);
//选择所有选项
动作动作=新动作(驱动);
act.keyDown(按键控制);
用于(WebElement选项:选项){
if(values.contains(option.getText())){
点击(选项);
}
}
动作键控(键控);
表演;
driver.quit();
以及将数据从工作簿加载到ListArray:

List<String> values =  new ArrayList<String>();

FileInputStream stream = new FileInputStream("C:\\file.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(stream);
XSSFSheet worksheet = workbook.getSheetAt(0);
Iterator<Row> rows = worksheet.rowIterator();
while (rows.hasNext()) {
    Row row = rows.next();
    if(row.getRowNum() > 0) {                             // skip first row
        values.add(row.getCell(1).getStringCellValue());  // add the second cell
    }
}
stream.close();
List values=new ArrayList();
FileInputStream=新的FileInputStream(“C:\\file.xlsx”);
XSSF工作簿=新XSSF工作簿(流);
XSSFSheet工作表=工作簿。getSheetAt(0);
迭代器行=工作表。行迭代器();
while(rows.hasNext()){
Row=rows.next();
如果(row.getRowNum()>0){//跳过第一行
values.add(row.getCell(1.getStringCellValue());//添加第二个单元格
}
}
stream.close();

非常感谢@florentbr它成功了:D.将它们结合起来,没有任何问题。这是组合代码,如果有人需要它-

// =========The SpreadSheet=========

    File src = new File("C:\\file.xlsx");

    // Load file
    FileInputStream fis = new FileInputStream(src);

    // Load WB
    XSSFWorkbook wb = new XSSFWorkbook(fis);

    // Load Sheet
    XSSFSheet sh1 = wb.getSheetAt(0);

    // ==========The Browser===========

    String chromePath = "C:\\chromedriver.exe";
    System.setProperty("webdriver.chrome.driver", chromePath);

    WebDriver driver = new ChromeDriver();
    driver.manage().window().maximize();

    driver.get("http://www.htmlcodetutorial.com/forms/_SELECT_MULTIPLE.html");

    List<WebElement> options = driver.findElements(By.xpath("//select[@name='toppings']//option")); //Find the options within this element within the page

    List<String> values = new ArrayList<String>();  //values from excel will be stored within this array

    Iterator<Row> rows = sh1.rowIterator();


    while (rows.hasNext()) 
    {

        Row row = rows.next();

        if (row.getRowNum() > 0) 
        {

            values.add(row.getCell(1).getStringCellValue());

        }
    }

    System.out.println(values);

    Actions act= new Actions(driver);

    act.keyDown(Keys.CONTROL);

    for (WebElement option:options) 
    {

        if (values.contains(option.getText())) {
            act.click(option);
        }
    }

    act.keyUp(Keys.CONTROL);
    act.perform();

    Thread.sleep(2000);



    fis.close();
/==========电子表格=========
文件src=新文件(“C:\\File.xlsx”);
//加载文件
FileInputStream fis=新的FileInputStream(src);
//加载WB
XSSF工作簿wb=新XSSF工作簿(fis);
//负载表
XSSFSheet sh1=wb.getSheetAt(0);
//=============浏览器===========
字符串chromePath=“C:\\chromedriver.exe”;
System.setProperty(“webdriver.chrome.driver”,chromePath);
WebDriver驱动程序=新的ChromeDriver();
driver.manage().window().maximize();
驱动程序。获取(“http://www.htmlcodetutorial.com/forms/_SELECT_MULTIPLE.html");
List options=driver.findElements(By.xpath(//select[@name='toppings']//option”)//在页面中查找此元素中的选项
列表值=新的ArrayList()//excel中的值将存储在此数组中
迭代器行=sh1.roweiterator();
while(rows.hasNext())
{
Row=rows.next();
if(row.getRowNum()>0)
{
add(row.getCell(1.getStringCellValue());
}
}
System.out.println(值);
动作动作=新动作(驱动);
act.keyDown(按键控制);
用于(WebElement选项:选项)
{
if(values.contains(option.getText())){
点击(选项);
}
}
动作键控(键控);
表演;
《睡眠》(2000年);
fis.close();

了不起的家伙。非常感谢。

欢迎来到so。我不能完全理解你的问题。您在代码中的何处发现错误或问题?抱歉,更新了问题。我想做的是,只要excel中有一个值,它就会在excel和网站中的选项之间循环,并继续使用CTRL键选择所有选项,这些选项的文本值位于excel中,但值不是来自excel。您在中使用的代码是我提供的静态值。我希望值来自excel,通过循环,我希望继续选择所有选项,只要excel中有值。在excel中,值可能会随着时间的推移而改变,因此选择也会改变。谢谢。我添加了一个将数据从工作簿加载到ListArray的示例。非常感谢。请您将这两个代码缝合起来,以显示它如何协同工作,好吗?再次感谢。