【问题标题】:Print index of the specific search result on the console在控制台打印特定搜索结果的索引
【发布时间】:2018-02-20 08:52:03
【问题描述】:
driver.navigate().to("https://maps.mapmyindia.com/");
Thread.sleep(3000);

driver.findElement(By.xpath(".//*[@id='onboarding-popup-sec']/div/div/button")).click();

File src = new File("D:\\Screenshots\\CityList.xlsx");
FileInputStream fis = new FileInputStream(src);
XSSFWorkbook wb = new XSSFWorkbook(fis);

XSSFSheet sheet1 = wb.getSheetAt(0);
int rowcount = sheet1.getLastRowNum();

for(int i=1; i<=rowcount; i++) {

    String str = sheet1.getRow(i).getCell(0).getStringCellValue();
    fis.close();
    driver.findElement(By.xpath(".//*[@id='auto']")).clear();

    driver.findElement(By.xpath(".//*[@id='auto']")).sendKeys(str);
    Thread.sleep(5000);

    By mySelector = By.xpath(".//*[@id='asa']/div[2]/span");
    List<WebElement> elements = driver.findElements(mySelector);

    int count=0;
    for(WebElement e: elements) {
        count++;
        System.out.println(e.getText());

        if(e.getText().toString().equals(str)) {
            System.out.println(count);
            sheet1.getRow(i).createCell(1).setCellValue("Pass");
        }
        else {
            sheet1.getRow(i).createCell(1).setCellValue("Fail");
        }
    }

    FileOutputStream fos = new FileOutputStream(src);
    wb.write(fos);
    fos.close();
}

在这段代码中,我打开 Chrome 并通过 selenium 导航到地图站点,并从 Excel 工作表中输入一个字段。在网络上的搜索字段中,它显示了一些自动建议,我想从列表中获取匹配结果的索引并在控制台中打印它。

在上面的代码if(e.getText().toString().equals(str)) 中,这一行没有执行或者索引没有打印。

请帮忙!

【问题讨论】:

  • 我已经根据您的确切要求更新了我的答案,看看
  • 对您有帮助吗?

标签: java eclipse selenium


【解决方案1】:
List<WebElement> list = div.findElements(By.tagName("li"));
Thread.sleep(5000);
int listsize= list.size();
for(int i=0;i<listsize;i++)
 {
      Thread.sleep(1000);
      System.out.println(list.get(i).getText());
      if(list.get(i).getText().contains("Nehru Place"))
      {
       System.out.println(i+"=index of Nehru Place");
      }
}

得到以下输出:

尼赫鲁广场

新德里,德里

0=尼赫鲁广场索引

新德里爱神酒店

尼赫鲁广场,新德里,德里

1=尼赫鲁广场索引

S2 尼赫鲁广场,新德里,德里

2=尼赫鲁广场索引

902 尼赫鲁广场,新德里,德里

3=尼赫鲁广场索引

901 尼赫鲁广场,新德里,德里

4=尼赫鲁广场索引

903 尼赫鲁广场,新德里,德里

5=尼赫鲁广场索引

尼赫鲁广场伊壁鸠鲁 26, Nehru Place, 新德里, South District, Delhi- 110065

6=尼赫鲁广场索引

尼赫鲁广场 哈里亚纳邦卡纳尔区卡尔纳尔

7=尼赫鲁广场索引

rrd.net.in

【讨论】:

  • 谢谢,但我想要与字符串完全匹配的元素的最想要的索引,就像当我将输入作为 Nehru Place 时,它​​会给出完全匹配并首先出现在搜索结果
【解决方案2】:

以下代码与您从搜索建议中搜索的字符串完全匹配。

试试这个:

    driver.get("https://maps.mapmyindia.com/");
    Thread.sleep(3000);
    driver.findElement(By.xpath(".//*[@id='onboarding-popup-sec']/div/div/button")).click();
    Thread.sleep(2000);
    driver.findElement(By.xpath("//div[@class='input-group']//input[@id='auto']")).sendKeys(placeToSearch);
    Thread.sleep(2000);
    List<WebElement> elements = driver
            .findElements(By.xpath("//div[@class='as-results']//li[@class='as-result-item search-res']"));

    boolean match = false;
    int count = 0;
    for (WebElement element : elements) {
        count++;
        String text = element.findElement(By.xpath(".//div[@class='search-item']/span")).getAttribute("innerHTML");
        int index = text.indexOf('<');
        text = text.substring(0,index);
        if (text.equalsIgnoreCase(placeToSearch)) {
            System.out.println("Index of the element is " + count);
            match = true;
            break;
        }
    }
    if (!match) {
        System.out.println("Could not find the match in the result");
    }

【讨论】:

  • 6 Agartala Airport Usha Bazar Gandhigram Tripura 799009 Agartala Tripura Ginger Hotel Agartala 79 Tilla Agartala Tripura 799006 CHOUDHURY TRADERS Agartala Assam Highway, Shibnagar, Dhaleswar, Agartala, West Tripura District, Tripura- 799007 boxanagar ,Agartala,Tripura CP321278 Banamalipur B.K.Road Agartala Tripura,这是我将 Agartala 作为输入之一时的结果,我只需要列表中的 Agartala 索引。
  • 非常感谢,只有一个问题,它打印元素的索引不正确,当我搜索 Agartala 时,它打印 1 但 Agartala 的实际索引是 2,与其他结果相同,例如当我搜索 Agra 时打印 2 但实际索引为 1。
  • @shivam ,还有问题吗?
猜你喜欢
  • 2017-09-29
  • 1970-01-01
  • 2017-10-01
  • 2021-10-13
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 2018-07-06
相关资源
最近更新 更多