我无法为动态元素编写xpath

时间:2017-12-11 16:12:22

标签: java selenium-webdriver

我在以下情况中遇到问题。请帮帮我们。 情景 -

  1. 打开网址 - https://member.bseindia.com/
  2. 点击<MF>文件夹。
  3. 点击<COMMON>
  4. 点击<DEC-2017>文件夹。
  5. 点击<Current date>文件夹
  6. <Current date>文件夹每天都在动态生成。

    我已编写代码但无法为动态文件夹编写xpath。前2017年11月12日

    public class bseIndia
    {
        String driverPath = "C:\\Users\\Public\\Public Desktop";
        public WebDriver driver;
        @BeforeClass
        public void setUp() 
        {
            System.setProperty("webdriver.chrome.driver","F:\\Abhishek\\chromedriver.exe");
            driver = new ChromeDriver();
            driver.manage().window().maximize();
    
        }
        @Test
        public void nav() throws InterruptedException
        {
            System.setProperty("webdriver.gecko.driver", "F:\\Abhishek\\Document\\geckodriver.exe");
            System.setProperty("webdriver.chrome.driver", driverPath+"chromedriver.exe");
            driver.navigate().to("https://member.bseindia.com");
            driver.findElement(By.xpath("//a[@id='FileGridVB1_gvFiles_ctl06_lbFolderItem']")).click();
            driver.findElement(By.xpath("//a[@id='FileGridVB1_gvFiles_ctl02_lbFolderItem']")).click();
            driver.findElement(By.xpath("//a[@id='FileGridVB1_gvFiles_ctl02_lbFolderItem']")).click();
            //driver.findElement(By.xpath("//a[@id='FileGridVB1_gvFiles_ctl06_lbFolderItem']")).click();
            Date date=new Date();
            SimpleDateFormat sm = new SimpleDateFormat("dd-mm-yyyy");
            driver.findElements(By.xpath("//a[@id='FileGridVB1_gvFiles_ctl02_lbFolderItem']"));
            boolean b= driver.findElements(By.xpath("//a[@id='FileGridVB1_gvFiles_ctl02_lbFolderItem']")).contains(sm.format(date));
            if(b==true)
            {
            here I have write the xpath for dynamic folder. 
            }
    
        }
    
    }
    

1 个答案:

答案 0 :(得分:1)

我会做一些不同的事情。我通常会尝试查看这样的事情,我会重复行动并尝试提出一个能够处理它的一般功能。在这种情况下,您将单击给定特定预期名称的文件夹。然后我会编写一个函数clickOnFolder(String folderName),以便我可以处理这种情况。然后,每次需要单击文件夹时,只需调用该函数。代码在

之下
public static void clickOnFolder(String folderName)
{
    driver.findElement(By.xpath("//a[contains(., '" + folderName + "')]")).click();
}

使用XPath,我们发现一个A标签,其中包含文件夹名称的文本,无论是&#34; MF&#34;或&#34; COMMON&#34;或今天的约会。此常规功能可用于单击任何文件夹。

在您的问题中,您的一个问题是您需要在今天的日期之前找到该文件夹​​。您已经询问了包含日/月/年的最终文件夹名称,但您确实需要它来包含文件夹(DEC-2017)。

要处理这些日期,您只需要以所需的格式获取今天的日期,然后找到代表使用XPath的文件夹的A标记。将今天的日期转换为正确格式的代码如下所示。

我已经测试了下面的代码,但它确实有效。

String url = "https://member.bseindia.com/";
driver.navigate().to(url);

// get date formats for folder names
LocalDateTime currentTime = LocalDateTime.now();
String todaysDate = currentTime.format(DateTimeFormatter.ofPattern("dd-MM-yyyy"));
String monthYear = currentTime.format(DateTimeFormatter.ofPattern("MMM-yyyy")).toUpperCase();

clickOnFolder("MF");
clickOnFolder("COMMON");
clickOnFolder(monthYear);
clickOnFolder(todaysDate);

boolean b开头的代码行由于多种原因无效。

  1. 您正在使用.findElements()(复数)返回一个集合,因此您需要查看单个元素,例如.get(0),进行比较。

  2. 您正在将StringWebElement进行比较,但始终会失败。你想要的是driver.findElement(locator).getText().contains("some string");

  3. 您的日期格式使用mm,日期时间格式表示分钟,而不是月份。你想要MM