Java driver.findElement(By.xpath)返回错误
我有以下代码Java driver.findElement(By.xpath)返回错误,java,selenium,xpath,Java,Selenium,Xpath,我有以下代码 for ( ; ; ) { int x=0; System.out.println("Executing!"); //wait2.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("xpath=(//a[contains(text(),'-P24-')])["+x+"]"))); driver.fin
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]
但有时它位于
//a[contains(text(),'-P24-'][2]
//a[contains(text(),'-P24-'][3]
所以我正在尝试上面的代码。
我猜在web驱动程序中,我不能使用[x],但您能告诉我吗?
谢谢!首先,查看是否有多个点击:
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-')]");
或者你可以循环浏览所有这些内容:
for (int x=0; x<elems.size(); x++)
System.out.println(elems.get(x).getText());
请尝试以下操作:
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
//a[text()[contains(.,'-P24-')]]["+x+"]
异常的消息有什么不清楚的地方?xpath无效,并且不难发现问题。我正在尝试找到问题的解决方案。我确实理解异常…@f1sh当你不能提供解决方案时,为什么你要否决我的问题?!我可以提供一个。但是很容易发现,给你解决方案对你没有帮助当java代码无效时,您会寻找什么?这仍然会引发异常,因为xpath不可用valid@f1sh:Bill的xpath有什么问题?@kushal。它不是Bill的xpath,他只是复制了它。因此它包含与OP问题中的错误相同的错误。是的,我知道我应该发现缺少的右括号,而你是是的,我复制了它。虽然我不认为它值得两次否决票。但是缺少括号是出现异常的原因。复制问题并将其包装为答案是一个很好的理由。imho。你试过运行它吗?这个xpath表达式也错了。OP的异常声明xpath无效,而你只是将它复制到n答案。好的;只是缺少了一个,我现在已经更新了。这有机会成为一个被接受的答案。这就是OP的无效选择例外的原因。OP到底是什么?