我有以下代码
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],但你可以指点我吗? 谢谢!
答案 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());