带有查找元素命令的字符串变量Java

时间:2018-03-06 12:02:29

标签: java selenium xpath selenium-webdriver chrome-web-driver

您好,以下所有代码都适用于此。

String content = FileUtils.readFileToString(new File("C:\\PayrollSync\\prepayroll.txt"));
        String [] Arrayclients = content.split("\n");
        // begin for loop
        for(String client : Arrayclients) { 

        PP_OBJ_CycleData.verifysearch(driver);
        PP_OBJ_CycleData.searchbox(driver).clear();         
        PP_OBJ_CycleData.searchbox(driver).sendKeys(client);
        PP_OBJ_CycleData.searchbox(driver).sendKeys(Keys.BACK_SPACE);
        Thread.sleep(4000);

        //WebElement dropdown = driver.findElement(By.xpath(".//*[@title="+client+"]"));
        //dropdown.click();
        //driver.findElement(By.xpath(".//*[(text(),"+client+"]")).click();
        driver.findElement(By.xpath("//*[contains(text(),"+client+")]")).click();;
         Thread.sleep(2000);

        PP_OBJ_CycleData.practitioner(driver).click();

问题: 没有为driver.findElements工作,如:

//WebElement dropdown = driver.findElement(By.xpath(".//*[@title="+client+"]"));
        //dropdown.click();
        //driver.findElement(By.xpath(".//*[(text(),"+client+"]")).click();
        driver.findElement(By.xpath("//*[contains(text(),"+client+")]")).click();;
         Thread.sleep(2000);

我的失败痕迹说无法找到元素By.xpath(“// * [contains(text(),”+ client +“)]”))。但是,当我转到下一页时,我正在等待元素可见。我的等待在下面。

 Wait<WebDriver> wait = new FluentWait<WebDriver>(driver).withTimeout(20, TimeUnit.SECONDS);
           element = driver.findElement(By.id("toolbarQuickSearch"));

           wait.until(ExpectedConditions.or(
                ExpectedConditions.visibilityOf(element),
                ExpectedConditions.elementToBeClickable(element)
            ));

我可以看到的问题是,如果在包含字符串的变量之后输入到搜索字段并且字符串名称是可见的,则selenium无法找到要点击的字符串名称,例如下面的内容:

enter image description here

我可以把它放进去,它会一直点击它:

driver.findElement(By.xpath("//*[text()='midrfrate']"]"));

但是,如果我做这样的事情,它无法找到它:

 driver.findElement(By.xpath(".//*[(text(),"+client+"]")).click();
  driver.findElement(By.xpath("//[contains(text(),"+client+")]")).click();

请帮助我,我尝试了以下但没有成功: How to use variables in XPath?

2 个答案:

答案 0 :(得分:1)

字符串".//*[(text(), " + client + "]"等于".//*[(text(), midrfrate]"

您需要将变量放在撇号

".//*[contains(text(), '" + client + "']"

答案 1 :(得分:1)

你的xpath那里:

driver.findElement(By.xpath("//*[contains(text(),"+client+")]")).click();

  1. 应包含撇号

  2. 包含块中的文本应包含精确的字符串(在客户端变量'midrfrate'中有尾随空格)。

  3. 最终的xpath是:

    driver.findElement(By.xpath("//*[contains(text(),'"+client.trim()+"')]")).click();

    其中trim()方法从客户端变量中删除前导空格和尾随空格。