2017-02-01 11 views
0

Я создаю приложение, которое будет иметь возможность разрешить пользователю создавать оповещения Google в виде RSS-канала.Невозможно щелкнуть элемент с помощью Horseman

Только начал с Всадника/PhantomJS, и вопрос у меня теперь на веб-странице, чтобы нажать на меню, чтобы отобразить параметры на «доставить»:

enter image description here

Заходя это страницы через браузер и нажав на то, где будет отображаться ваш адрес электронной почты, появится небольшой номер div с двумя параметрами, чтобы выбрать «RSS-канал». Через Horseman я не могу найти способ щелкнуть по нему. Я сделал скриншоты после click(), чтобы увидеть его, но ничего. Мой код:

horseman 
    .open('https://google.com/alerts') 
    .type('input[type="text"]', this.name) 
    .click('span[class="show_options"]') 
    .screenshot('/home/gabriel/Desktop/ga-named.png') 
    .wait(2000) 
    .click('.delivery_select > div.jfk-select') 
    .screenshot('/home/gabriel/Desktop/ga-deliver-to.png') 
    .close() 

Только .click('.delivery_select > div.jfk-select') не работает. Ниже HTML этого конкретного региона:

<div class="delivery_select"> 
    <div class="goog-inline-block goog-flat-menu-button jfk-select" role="listbox" aria-expanded="false" tabindex="0" aria-haspopup="true" style="user-select: none;" aria-activedescendant=":8m"> 
    <div class="goog-inline-block goog-flat-menu-button-caption" id=":8m" role="option" aria-setsize="2" aria-posinset="1">[email protected]</div> 
    <div class="goog-inline-block goog-flat-menu-button-dropdown" aria-hidden="true">&nbsp; 
    </div> 
    </div> 
</div> 

ответ

1

Я никогда не использовал Всадника, но, безусловно, вы сможете реализовать решение самостоятельно.

Щелкнув в сценарии не работает, потому что выпадающий не слушает кликов:

enter image description here

Вместо этого, вы можете моделировать MouseDown:

// Click "Deliver to" dropdown 
.evaluate(function(){ 
    var event = document.createEvent ('MouseEvents'); 
    event.initEvent ("mousedown", true, true);  

    document.querySelector('.delivery_select > div.jfk-select').dispatchEvent(event); 
}) 
+0

Да, похоже, это было проблемой, для этого элемента нет события 'click'. Я не знал, что могу это проверить, спасибо. Согласно изображенному изображению, это сработало, и я вижу вариант, который должен появиться, хотя он не выровнен, но я считаю, что все в порядке. Большое спасибо, @Vaviloff – mfgabriel92

1

Я думаю, проблема в том, что он не может щелкнуть с данным классом, попробуйте с другим идентификатором. Проверьте, как я использую всадника для входа.

router.post('/login', function (req, res) { 
    //default urls is http://144.76.34.244:8080/magento/1.9/web/customer/account/login// 
    var url_ = req.body.url; 
    var username = req.body.username; 
    var password = req.body.password; 
    if (url_.length > 0 && username.length > 0 && password.length > 0) { 
     horseman 
       .userAgent('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0') 
       .open(url_) 
       .type('input[name="login[username]"]', username) 
       .type('input[name="login[password]"]', password) 
       .click('[name="send"]') 
       .wait(5000) 
       .url() 
       .then(function (url) { 
        if (url == config.URL) { 
         res.json({status: "200", msg: 'login successfull', url: url}); 
        } else { 
         res.json({status: "200", msg: "login failed"}); 
        } 
       }) 
       .screenshot('big.png') 
       .close(); 
    } else { 
     res.json({status: "500", msg: "invalid fields"}); 
    } 
}); 

Надеюсь, это поможет.

+0

К сожалению, это не так. И чтобы все усложнить, я узнал, что 'div', который отображается при нажатии на эту опцию, фактически встроен через JS. Другими словами, до щелчка он не существует, что-то, что я, вероятно, мог бы легко щелкнуть, даже спрятать. – mfgabriel92

+0

+ для примера в реальном времени входа в систему с помощью Horseman – Vaviloff