通过祖先/父母/等定位下拉框?



有问题的HTML代码

<div class="wrap-padding-sm">
<div class="threeCols">
<div class="colContent">
<div class="sub-colContent">
<span>
<div id="cust_opt_TypeCodeCheckBox_" class="  ">
<div>
<div class="uniform-checkbox    checked">.
<div class="checker col-xs-1 col-md-1" id="uniform-bunny:h_abc257:0:cust_opt_TypeCodeCheckBox_:select-boolean-checkbox" style="display: block;">
<span class="checked">
<input id="bunny:h_abc257:0:cust_opt_TypeCodeCheckBox_:select-boolean-checkbox" type="checkbox" name="bunny:h_abc257:0:cust_opt_TypeCodeCheckBox_:select-boolean-checkbox" checked="checked" class=" " onclick="mojarra.ab(this,event,'valueChange','bunny:custom_bunny_hops','bunny:custom_bunny_hops',{'onevent':recommendedBunnyAfterAJAX})">
</span>
</div>
</div>
</div>
</div>
</span>
<span class="checkTitle">This money</span>
</div>
<div class="sub-colContent">
<div class="select-dropWrap">
<div id="h_abc281" class="form-group form-group-lg">
<label for="bunny:h_abc257:0:h_abc281:select-one-menu" class="control-label">up to </label>
<div class="select-dropMenu  ">
<div class="selector uniform-select fixedWidth" id="uniform-changeCoverages:j_idt257:0:j_idt281:select-one-menu">
<span style="user-select: none;">600</span>
<select id="bunny:h_abc257:0:h_abc281:select-one-menu" name="bunny:h_abc257:0:h_abc281:select-one-menu" class="form-control input-lg  " size="1" onchange="mojarra.ab(this,event,'valueChange','bunny:custom_bunny_hops','bunny:custom_bunny_hops',{'onevent':recommendedBunnyAfterAJAX})">
<option value="600" selected="selected">600</option>
<option value="800">800</option>
<option value="1000">1000</option>
</select>
</div>
</div>
</div>
</div>
</div>
<span class="bunnyMsg h7 mobile-show"></span>
</div>
<div class="colContent">
<a data-toggle="collapse" class="margin-R10" data-target="#cust_bunny_hops_0">
<span>some text here</span>
</a>
<a data-toggle="collapse" data-target="#cust_bunny_hops_0" class="btn-accordian collapsed"></a>
</div>
</div>
<div id="cust_bunny_hops_0" class="bunny-wrap collapse">
<p>Some text here</p>
</div>
<span class="bunnyMsg h7 mobile-hide"></span>
</div>

我需要做的是目标

<span class="checkTitle">This money </span>

然后从那里定位下拉菜单。 我设法使用

Select dropDown = new Select(driver.findElement(By.xpath("//*[contains(text(), 'This money')]//ancestor::span[1]//select")));

它在dropDown.selectByValue("800");时有效.现在,如果我尝试选择另一个下拉菜单,则会出现问题,我得到过时的元素引用异常

我通过更改我的代码解决了StaleElementReferenceException

Select dropDownTwo = new Select(driver.findElement(By.xpath("//*  [contains(text(), 'This money')]/following::select")));
Select dropDownTwo = new Select(driver.findElement(By.xpath("//*  [contains(text(), 'Another drop down not in the HTML above')]/following::select")));
dropDown.selectByValue("800");
dropDownTwo.selectByValue("1000000");

对此

Select dropDownTwo = new Select(driver.findElement(By.xpath("//*  [contains(text(), 'This money')]/following::select")));
dropDown.selectByValue("800");
Select dropDownTwo = new Select(driver.findElement(By.xpath("//*  [contains(text(), 'Another drop down not in the HTML above')]/following::select")));
dropDown.selectByValue("1000000");

根据提供的 HTML,您似乎正在寻找的SELECT是您指定的引用标记后的第一个SELECT

<span class="checkTitle">This money</span>

因此,您可以使用下面的 XPath。

//span[contains(.,'This money')]/following::select

最新更新