1

我正在尝试使用以下代码从下拉列表中选择 Selenium 2 中的元素:

WebElement przyczynaZakProcesuSelect = driver.findElement(
           By.name("j_id_t:j_id_41:0:j_id_4h:0:j_id_51:0:qstloop:0:select1" ));

        Select sel = new Select( przyczynaZakProcesuSelect );
        List<WebElement> lista = sel.getOptions();
        System.out.println( "List --> count of elements :" + lista.size());
        for( WebElement e: lista){
            System.out.println( e.getText() );
        }

        sel.selectByVisibleText("yyyyyy");

使用 InternetExplorerDriver 时一切正常,此代码将所有 15 个选项打印到控制台,我可以选择最后一个yyyyyy选项。这是打印到 InternetExplorerDriver 控制台的输出

List --> count of elements :15
aaaaaa 
…….
……
yyyyyy 

但是,当使用 HTMLUnitDriver 时,Selenium 仅检索列表中的第一个选项,所有剩余选项都丢失,并且我只能选择第一个选项,这是使用 HTMLUnitDriver 时打印到控制台的内容:

List --> count of elements :1
aaaaaa 

这是一段 HTML 代码:

<select id="j_id_t:j_id_41:0:j_id_4h:0:j_id_51:0:qstloop:0:select1" 
        onchange="jsf.ajax.request('j_id_t:j_id_41:0:j_id_4h:0:j_id_51:0:qstloop:0:select1',event,
                  {execute:'@form',render:'j_id_t:processContent j_id_t:ccpmScripts ccpmMessages ',
                   'javax.faces.behavior.event':'change'})" 
        class="selectboxNew frmLOK" onfocus="a4j_focus(this)" 
        title="aaaaa" 
        size="1" name="j_id_t:j_id_41:0:j_id_4h:0:j_id_51:0:qstloop:0:select1"> 
<option title="aaaaa" selected="selected" value="4650">aaaaaaaaa</option>
<option title="bbbbb" value="4643">bbbbb</option>
<option title="ccccc" value="4651">ccccc</option>
....
....
<option title="xxxxx" value="4647">xxxxx</option>
<option title="yyyyy" value="4649">yyyyy</option>
</select>

我做错了什么?有什么解决方法吗?
我需要使用 HTMLUnitDriver 运行这个测试,请帮忙。

4

1 回答 1

0

确保你做了

driver.setJavascriptEnabled(true);

如果你这样做了,你可以尝试模拟特定的浏览器,例如:

HtmlUnitDriver driver = new HtmlUnitDriver(BrowserVersion.FIREFOX_3);

您也可以尝试共同单击该选择之前的选择值。

确保您充分了解驱动程序的行为- 查看文档

不幸的是,我的经验是模拟驱动程序无法正常工作于更大的应用程序(我的意思是 JavaScript)。特别是当有一些特定于浏览器的解决方法时。

于 2013-09-19T22:38:15.993 回答