【问题标题】:driver.findElement(By.xpath returning errordriver.findElement(By.xpath 返回错误
【发布时间】:2017-04-27 17:04:16
【问题描述】:

我有以下代码

for ( ; ; )
        {
            int x=0;
            System.out.println("Executing!");
            //wait2.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("xpath=(//a[contains(text(),'-P24-')])["+x+"]")));
            driver.findElement(By.xpath("//a[contains(text(),'-P24-']["+x+"]")).click();
            System.out.println("Number"+x);
            x=1+x;
        }

抛出异常

Exception in thread "main" org.openqa.selenium.InvalidSelectorException: Given xpath expression "//a[contains(text(),'-P24-'][0]" is invalid

我在使用 Selenium IDE 时发现文本 -P24- 位于

//a[contains(text(),'-P24-'][2]

但有时它位于

//a[contains(text(),'-P24-'][3]

所以我正在尝试上面的代码。 我猜在网络驱动程序中,我无法使用 [x],但你能指点我吗? 谢谢!

【问题讨论】:

  • 异常信息有什么不清楚的地方? xpath无效,不难发现问题。
  • 我正在尝试找到问题的解决方案。我确实理解这个例外......
  • @f1sh 当您无法提供解决方案时,您为什么要对我的问题投反对票?!
  • 我可以提供一份。但它很容易被发现,给你解决方案也无济于事。当您的 java 代码无效时,您会寻找什么?

标签: java selenium xpath


【解决方案1】:

尝试以下操作:

 List <WebElement> allItems = 
 driver.findElements(By.xpath("//a[contains(text(),'-P24-')]"));
    if(allItems.size()>0){
        Iterator itr = allItems.iterator();

        int i=0;
        while(itr.hasNext()){
            WebElement yourElement = (WebElement) itr.next();
            System.out.println(yourElement .getText());
            i++;
        }
    }

【讨论】:

  • 你试过运行它吗?这个 xpath 表达式也是错误的。 OP 的异常表明 xpath 无效,但您只需将其复制到答案中即可。
  • 好的;只是缺少一个 ) ,我现在已经更新了
  • 现在这有机会成为公认的答案。 ) 是 OP 的 InvalidSelectorException 的原因。
  • OP到底是什么?
【解决方案2】:

在你的代码中尝试下面的 xpath

//a[text()[contains(.,'-P24-')]]["+x+"]

【讨论】:

    【解决方案3】:

    首先,找出是否有多个命中:

    int matches = driver.findElements(By.xpath("//a[contains(text(),'-P24-')]").size();
    

    然后您可以在 xpath 中传递 [x] 参数,或者您可以将匹配的 Web 元素的整个数组放入 Web 元素数组中:

    List<WebElement> elems = driver.findElements(By.xpath("//a[contains(text(),'-P24-')]");
    

    那么您可以通过以下方式获得所需的:

    elems.get(x);
    

    或者你可以循环浏览它们:

    for (int x=0; x<elems.size(); x++)
      System.out.println(elems.get(x).getText());
    

    只要我们纠正错别字,这里仍然是使用上面的 elems 数组进行迭代的更简单方法:

    for(WebElement elem : elems)
        System.out.println(elem.getText());
    

    【讨论】:

    • 这仍然会抛出异常,因为 xpath 无效
    • @f1sh : Bill 的 xpath 有什么问题?
    • @kushal。这不是比尔的 xpath,他只是复制了它。因此,它包含与 OP 问题中的错误相同的错误。
    • 是的,我知道我应该发现缺少的右括号,你说得对,我复制了它。不过,我认为这不值得两次投反对票。
    • 但是缺少括号是异常的原因。复制问题并将其包装为答案是恕我直言的一个很好的理由。
    猜你喜欢
    • 1970-01-01
    • 2019-05-15
    • 2020-06-12
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    相关资源
    最近更新 更多