driver.findElement(By.xpath返回错误

时间:2017-04-27 17:04:16

标签: java selenium xpath

我有以下代码

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],但你可以指点我吗? 谢谢!

3 个答案:

答案 0 :(得分: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++;
        }
    }

答案 1 :(得分:0)

在代码中尝试以下xpath

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

答案 2 :(得分:-1)

首先,查看是否有多次点击:

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());