Java 选择多个选项,选择值将来自Excel
我试图做的是在按住CTRL键的同时从这个示例站点中选择多个选项 但是,多个选择值将来自excel,这意味着如果excel行在不同的行(在同一列中)上分别有蘑菇、洋葱和橄榄等值,它将在页面中逐个选择这些值。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
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的示例。非常感谢。请您将这两个代码缝合起来,以显示它如何协同工作,好吗?再次感谢。