【问题标题】:String Variable with Find Element Commands Java带有查找元素命令 Java 的字符串变量
【发布时间】:2018-03-06 21:04:56
【问题描述】:

您好,以下所有代码都可以在这里工作。

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 找不到要单击的字符串名称,例如:

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

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?

【问题讨论】:

  • 我认为您缺少引号。你有driver.findElement(By.xpath("//*[contains(text(),"+client+")]")).click();,它叫driver.findElement(By.xpath("//*[contains(text(),'"+client+"')]")).click();
  • 我会试试这个一分钟
  • 当我使用上面的方法时,我从堆栈跟踪中收到了这条消息......无法找到元素:{“method”:“xpath”,“selector”:“//* [contains(text( ),'midrfrate ')]"}
  • 好吧,您的客户端变量中有空格。试试这个driver.findElement(By.xpath("//*[contains(text(),'"+client.trim()+"')]")).click();
  • 我会的,但空白来自(eclipse中的堆栈跟踪消息,它将其余部分放在另一行)因此空间

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


【解决方案1】:

你的 xpath:

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

  1. 应包含撇号

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

最终的 xpath 是:

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

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

【讨论】:

    【解决方案2】:

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

    您需要将变量放在撇号中

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

    【讨论】:

    • 我会试试这个一分钟
    • 这不起作用,这是堆栈跟踪错误.....org.openqa.selenium.InvalidSelectorException:无效选择器:无法使用xpath表达式定位元素。//* [( text(), 'midrfrate '] 因为以下错误: SyntaxError: Failed to execute 'evaluate' on 'Document': The string './/*[(text(), 'midrfrate ']' is not a valid XPath表达。
    • 这就是我在 Eclipse 中所拥有的... driver.findElement(By.xpath(".//*[(text(), '" + client + "']")).click ();
    • @Jonathan contains 不见了。
    • @Jonathan 你在'midrfrate '末尾也有一个空格
    猜你喜欢
    • 2018-07-17
    • 1970-01-01
    • 2017-11-29
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多