如何使用其xpath单击动态列表。元素不断变化

时间:2017-05-09 04:52:39

标签: selenium selenium-webdriver

元素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

1 个答案:

答案 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


 }