我收到了一条错误消息。这个错误一般可以但我无法在我的代码中解决它。有人可以帮助我吗?
说明:
我正在循环中获取航空公司代码,但是当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();
}
}
答案 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,因此语法可能会被破坏