我有一个网页,其中有一个级联下拉菜单。(见截图:)
第二个数据看起来像是通过ajax生成的,具体取决于第一个的选择。 以下是第一个选择的代码:
<select class="form-control input-sm" name="aff_network_id" id="aff_network_id" onchange="load_aff_campaign_id($(this).val(), 0); load_landing_page(this.value); load_text_ad_id(this.value);">
<option value="0"> -- </option>
<option value="1">Sales</option>
</select>
对于第二个选择,这是代码:
<select class="form-control input-sm" name="aff_campaign_id" id="aff_campaign_id" onchange="load_text_ad_id(this.value); if($('#landing_page_style_type')){load_landing_page( $('#aff_campaign_id option:selected').val(), 0, $('input:radio[name=landing_page_type]:checked').val()?$('input:radio[name=landing_page_type]:checked').val():'landingpage');} if($('#unsecure_pixel').length != 0) { change_pixel_data();}">
<option value="0"> -- </option>
<option value="1">iPhone on Amazon · $100.00</option>
</select>
现在使用网络驱动程序,当我这样做时:
WebDriver driver=new FirefoxDriver();
JavascriptExecutor js=null;
if (driver instanceof JavascriptExecutor) {
js = (JavascriptExecutor)driver;
}
js.executeScript("document.getElementById('aff_campaign_id').value='1';" +
"return document.getElementById('aff_campaign_id').value;")
这不会更改第二个级联选择的值。它总是返回“ - ”,即。默认值。这里可以做些什么来改变select的值?
答案 0 :(得分:2)
如果我正确理解了问题,为什么不使用webdriver在第一个dropDown中选择值,然后(在第二次更改后的值之后)在第二个comboBox中获取值?!例如喜欢
//First click on first comboBox
var dropDown = driver.findElement(By.Css("#aff_network_id"));
dropDown.click();
//Select value from first dropDown
dropDown.findElement(By.Css("option[value='1']")).click();
//after that value in second dropDown will be changed and you can get it's value
driver.findElement(By.Css("#aff_campaign_id")).getAttribute('value');
答案 1 :(得分:1)
开发人员可能在第一次下拉时绑定了一个事件。我的意思是,在从onblur事件的第一个下拉列表中选择选项后,他们可能会在第二个下拉列表中生成依赖项值。
所以你需要做的是你需要在选择选项后首先下拉事件。