Как я могу нажать кнопку JavaScript с помощью htmlunit? - PullRequest
3 голосов
/ 10 октября 2010

Я работаю над приложением, которое автоматически нажимает кнопку на веб-странице, используя htmlunit в Java. Единственная проблема заключается в том, что эта кнопка является кнопкой javascript, поэтому стандартная функция getInputByName () не будет работать. Любые предложения по борьбе с этим? Код для кнопки приведен ниже.

<a class="vote_1" id="1537385" href="/javascript%3Avoid%280%29/index"><img src="/images/parts/btn-vote.gif" alt="Btn-vote" /></a> 

Кроме того, вот другой код для голосования.

<div id="content"><script type="text/javascript" src="/js/scriptFeeds/voteArticle.js"></script> 

Что приводит к следующему javascript:

var pressed = new Array();

$j(document).ready(function() {
var nr = $j("input#number_of_articles").val();
for(var i=1; i<=nr; i++){
    $j("a.vote_"+i).click(function(){
        var article   = $j(this).attr("id");
        $j('#'+article).hide();
        if (!pressed[article]) {
            pressed[article] = "yes";
            jQuery.post('/vote-article', {
                _token: $j("#_token").val(),
                article_id: article
            },function(data) {
                $j("span.numberOfVotes_"+data.id).html(data.votes);
            }, "json");
        }
        return false;
    });
}
});

Ответы [ 3 ]

12 голосов
/ 11 октября 2010

Попробуйте использовать этот addOn для firefox, он записывает ваши действия и генерирует код HTMLUnit для него. может быть, это может помочь. http://code.google.com/p/htmlunitscripter/

9 голосов
/ 13 октября 2010

В кликабельных изображениях нет ничего особенного.Примерно так должно работать:

button = page.getHtmlElementById( "1537385" ) ;
page = button.click() ;

Затем HtmlUnit запустит Javascript и вернет обновленную страницу.

Если атрибут id тега 'a' не постоянен, вы можетенужно использовать XPath, чтобы захватить его.

5 голосов
/ 21 октября 2010

У меня есть очень похожая ссылка на одной из моих страниц.Если вы можете вызвать .click () для любого HtmlElement, он сможет запускать связанный Javascript.Вот мой код (сгенерированный из HtmlUnitScripter):

HtmlElement element4 = null;
Iterable<HtmlElement> iterable5 = page.getAllHtmlChildElements();
Iterator<HtmlElement> i6 = iterable5.iterator();
while(i6.hasNext())
{
    HtmlElement anElement = i6.next();
    if(anElement instanceof HtmlImage)
    {
        HtmlImage input = (HtmlImage) anElement;
        String[] elements = "http://example.com/pages/powerbutton.png".split( "/" );

        if(input.getSrcAttribute().indexOf(elements[elements.length-1] )> -1 )
        {
            element4 = input;
            break;
        }
    }
}

HtmlPage page = element4.click();
...