元素不再附加到DOM selenium webdriver

时间:2014-08-12 07:55:31

标签: selenium selenium-webdriver webdriver

我收到了一条错误消息。这个错误一般可以但我无法在我的代码中解决它。有人可以帮助我吗?

说明:

我正在循环中获取航空公司代码,但是当if(){}条件开始处理时。我收到错误

  

线程“main”中的异常org.openqa.selenium.StaleElementReferenceException:元素不再附加到DOM

这只是所有li代码中的一个。 li代码的总数为9。

<li data-airline-id="SU">
    <input id="airline_SU" type="checkbox" checked="checked" title="Aeroflot">
    <label for="airline_SU" class="clearfix">

            <span class="day-filters-label-price">$939</span>

        <span class="day-filters-label-message">Aeroflot</span>
    </label>
</li>

Java代码:

ul = driver.findElements( By.xpath( "//div[@id='filters-airlines']//ul[@class='clearfix']/li" ) );

    for( WebElement element : ul ){

        String countryCode = element.getAttribute( "data-airline-id" );

        System.out.println( countryCode );

        if( !"DE".equals( countryCode ) ){

            element.findElement( By.id( "airline_" + countryCode ) ).click();

        }

        try{
            Thread.sleep( 1000 );
        }
        catch( InterruptedException e ){
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

1 个答案:

答案 0 :(得分:1)

您可以使用'hack'。为避免StaleElementReferenceException,您必须在使用它之前重新定位元素。如果我理解你的逻辑,你想取消选中所有复选框,但是'DE'。您使用XPATH li's找到//div[@id='filters-airlines']//ul[@class='clearfix']/li。因此,您可以每次使用给定索引重新定位

ul = driver.findElements( By.xpath( "//div[@id='filters-airlines']//ul[@class='clearfix']/li" ) );

for( int i = 1; i <= ul.size(); i++ ){

    WebElement li =  driver.findElement( By.xpath( "(//div[@id='filters-airlines']//ul[@class='clearfix']/li)[" + i + "]" ) );

    String countryCode = li.getAttribute( "data-airline-id" );

    System.out.println( countryCode );

    if( !"DE".equals( countryCode ) ){

        li.findElement( By.id( "airline_" + countryCode ) ).click();

    }

    try{
        Thread.sleep( 1000 );
    }
    catch( InterruptedException e ){
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

PS我不使用Java,因此语法可能会被破坏