元素xpath将如下所示......这些都是动态的,所以有时,只有一个会在那里......有时......所有3都会在那里......等等,所以脚本必须用数字标识元素出现并相应地逐个点击。
public void NumberOfStops(){
Util.pause(Util.WaitingTime.SHORT);
JavascriptExecutor jse = (JavascriptExecutor)getDriver();
jse.executeScript("window.scrollBy(0,1000)", "");
Util.pause(Util.WaitingTime.SHORT);
Util.pause(Util.WaitingTime.SHORT);
List<WebElement> AirlineStops = this.getDriver().findElements(By.cssSelector("ng-scope layout-row"));
System.out.println("airlineSize = " + Integer.toString(AirlineStops.size()));
for ( WebElement stops22 : AirlineStops ) {
Util.pause(Util.WaitingTime.SHORT);
stops22.click();
Util.pause(Util.WaitingTime.SHORT);
}
xpaths将是这样的。
.//*[@id='stops']/div/check-box-switch/div/div[1]/label/div/div/div
.//*[@id='stops']/div/check-box-switch/div/div[2]/label/div/div/div
.//*[@id='stops']/div/check-box-switch/div/div[3]/label/div/div/div
答案 0 :(得分:0)
正如您所看到的,如果元素的数量没有变化,则特定的div会发生变化 你的通用xpath包含所有不同的项目;
.//*[@id='stops']/div/check-box-switch/div/
所以你可以这样做;
WebElement baseItem= this.getDriver().findElements(By.xpath(".//*[@id='stops']/div/check-box-switch/div"));
List<WebElement> allItems = baseItem.findElements(By.xpath("/div"));
for(WebElement item : allItem){
WebElement currentItem = item;
//do your action here
}