繁体   English   中英

如何在XPath中通过引用传递值,在XPath中,值是从Selenium Webdriver中的外部Excel工作表导入的

[英]How to pass value by reference in xpath where the values are imported from external excel sheet in selenium webdriver

我试图自动执行功能流程,在该流程中添加项目,然后确认是否添加成功。 我的Web表单有3个字段(例如fld1,fld2,fld3)。 我创建了一个外部Excel工作表,从该工作表中调用了fld1 fld2和fld3值并将其输入到表单中并进行提交。 我要自动化的步骤是:

  1. 步骤1.将Excel工作表第1行中的fld1,fld2和fld3导入表单(我能够做到)
  2. 步骤2.提交。(我能够做到)
  3. 步骤3.检查项目是否已添加。(无法执行此操作。)
  4. 步骤4。再次对第2行数据执行步骤1,然后执行步骤2,依此类推。

form1的UI是3个字段,分别是fld1,fld2,fld3,并在这些字段下方显示一个网格,以显示已添加的项目,一旦添加了项目,它将开始在此网格中显示为网格的最后一行。 一旦我们从表格1的excel表格中导入所有3个字段并提交,单击提交后,将打开一个iframe窗口,其中显示%上传,一旦其上传100%,用户需要单击关闭按钮和iframe类,并且用户位于表格1再次将项目添加为网格的最后一行。 直到这里我都能自动化。 我要检查项目是否已添加。 为此,我尝试使用assert,但不确定如何在xpath中通过引用传递值。 如果我对其进行硬编码,那么脚本将无法在excel工作表的第2行进行第二次迭代。我的问题是我应该如何在findElement By id或使用assert条件中通过引用传递值。 代码在这里:

String projectName = null;
WebDriverWait wait = new WebDriverWait( driver, 200);
FileInputStream IPLinkFile = new FileInputStream(new File("xlsx sheet location"));
XSSFWorkbook workbook = new XSSFWorkbook(TestIPLFile);
XSSFSheet sheet = workbook.getSheet("Test");
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext())
{
  Row row = rowIterator.next();
  Thread.sleep(500);
  driver.findElement(By.id("InsertButtonID")).click();
  wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.id("pname1ID")));
  Iterator <Cell> cellIterator = row.cellIterator();
  while (cellIterator.hasNext())
  {
    Cell cell = cellIterator.next();
    if (cell.getColumnIndex()==0)
    {
      driver.findElement (By.id("pname1ID")).clear();
      projectName = cell.getStringCellValue();
      driver.findElement (By.id("pname1ID")).sendKeys(cell.getStringCellValue());
    } else if(cell.getColumnIndex()==1)
    {
      Thread.sleep(500);
      driver.findElement(By.id("gvhost1ID")).clear();
      driver.findElement(By.id("gvhost1ID")).sendKeys(cell.getStringCellValue());
    } else if(cell.getColumnIndex()==2)
    {
      Thread.sleep(500);
      driver.findElement(By.id("gcTest1")).clear();
      driver.findElement(By.id("gcTest1")).sendKeys(cell.getStringCellValue());
    }
    else
    {
      break;
    }
  }
  driver.findElement(By.id("btnUpdateImportID")).click();
  Thread.sleep(10000);
  driver.switchTo().frame("TestImportTest");
  driver.findElement(By.id("form1"));
  driver.findElement(By.id("btnClose")).click();
  System.out.println("**********User uploaded IPLink Project successfully**********"+projectName);
  driver.navigate().refresh();
  Thread.sleep(500);
  driver.findElement(By.xpath("//div[@id = 'GridDataID']//td[contains(text(), 'TestAuto1')]"));
  System.out.println("**********User uploaded IPLTest Projects found**********"+projectName);
}

我将硒与java和testNG一起使用。

Java不支持自然引用传递。 相反,要通过引用传递值,必须生成对象的指针。 然后可以将指针传递给适当的函数。 您可以使用在API中定义的指针对象或通过将数据封装在对象中来执行此操作。 通过传递对象,您将传递参考。 实际上,所有对象传递都是参考传递,而所有非对象传递都是值传递。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM