Java 带有Find-Element命令的字符串变量

Java 带有Find-Element命令的字符串变量,java,selenium,xpath,selenium-webdriver,chrome-web-driver,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_Cyc

您好,下面所有代码都在这里工作

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();
问题是: 驱动程序无。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);
我的失败跟踪显示无法通过.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)
            ));
但是,如果我做了这样的事情,它就找不到了:

 driver.findElement(By.xpath(".//*[(text(),"+client+"]")).click();
  driver.findElement(By.xpath("//[contains(text(),"+client+")]")).click();
请帮助我,我尝试了以下方法,但没有成功: 字符串
“//*[(text(),“+client+”]”
等于
“/*[(text(),midrfrate)]”

您需要将变量放在撇号中

".//*[contains(text(), '" + client + "']"
您的xpath在那里:

driver.findElement(By.xpath(“//*[contains(text(),“+client+”)))。单击();

  • 应该包含撇号

  • ".//*[contains(text(), '" + client + "']"
    
  • contains块中的文本应包含精确的字符串(客户端变量“midrfrate”中有尾随空格)

  • 最后的xpath是:

    driver.findElement(By.xpath(“/*[contains(text(),“+client.trim()+”)]”)。单击();


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

    我认为您缺少引号。您有
    driver.findElement(By.xpath(“/*[contains(text(),“+client+”))))。单击();
    它将显示为
    driver.findElement(By.xpath(“/*[contains(text(),“+client+”)))))。单击();
    我将尝试这一分钟当我使用上面的代码时,我从堆栈跟踪中得到了这条消息…无法定位元素:{“方法”:“xpath”,“选择器”:“/*[contains(text(),'midrfrate')]”好的,您的客户机变量中有空格。请尝试这一
    驱动程序.findElement(By.xpath(“/*[contains(text(),“+client.trim()+”))])。单击()
    我将使用空格,但空格是来自(eclipse中的堆栈跟踪消息,它将其余的放在另一行)因此空格我将尝试这一分钟。这不起作用,因为这是堆栈跟踪错误…..org.openqa.selenium.InvalidSelectorException:无效选择器:无法找到带有xpath表达式的元素//*[(text(),'midrfrate'],因为以下错误:语法错误:未能对'Document'执行'evaluate':字符串'/*[(text(),'midrfrate']'不是有效的XPath表达式。这是我在eclipse…driver.findElement(By.XPath(./*[(text(),“+client+”])中的内容。单击();@Jonathan缺少
    包含的
    。@Jonathan在
    'midrfrate'的末尾还有一个空格