【问题标题】:Unable to set select value Using Javascript in selenium web driver无法在 selenium Web 驱动程序中使用 Javascript 设置选择值
【发布时间】:2014-08-28 13:21:12
【问题描述】:

我有一个网页,其中有一个级联下拉菜单。(见截图:)

第二个数据看起来像是通过 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的值?

【问题讨论】:

  • 您是否尝试过使用Select() 类来设置第一个&lt;select&gt; 元素的值?

标签: java javascript selenium selenium-webdriver html-select


【解决方案1】:

如果我正确地理解了问题,为什么不使用 webdriver 在第一个下拉菜单中选择值,然后(在第二次更改值之后)在第二个组合框中获取值?!例如喜欢的东西

//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');

【讨论】:

  • 不起作用。第二个级联下拉列表具有由 ajax 生成的元素。而第一个是静态的。
  • 出现什么样的问题? Webdriver 找不到第二个元素?还是从中选择?使用前面介绍的方法在第二个下拉菜单中选择值后,第二个下拉菜单会更新吗?
【解决方案2】:

开发人员可能已将事件与第一个下拉列表绑定。我的意思是,在从 onblur 事件的第一个下拉菜单中选择选项后,他们可能会在第二个下拉菜单中生成依赖值。

因此,您需要在选择选项后的第一个下拉菜单中触发一个事件。

【讨论】:

  • 没错!在调用每个下拉列表的 onchange 事件并等待 1 秒以等待脚本完成后,它工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
相关资源
最近更新 更多