Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何模拟点击google place自动完成结果?_Javascript_Google Maps_Integration Testing_Google Places Api_Casperjs - Fatal编程技术网

Javascript 如何模拟点击google place自动完成结果?

Javascript 如何模拟点击google place自动完成结果?,javascript,google-maps,integration-testing,google-places-api,casperjs,Javascript,Google Maps,Integration Testing,Google Places Api,Casperjs,我正在努力在集成测试中与我的google place自动完成结果进行交互 var placeSelector = '.pac-container .pac-item:first-child'; exports.runTest = function(test) { casper.waitForSelector('input.street-address'); // wait for page to load casper.sendKeys('input.street-addres

我正在努力在集成测试中与我的google place自动完成结果进行交互

var placeSelector = '.pac-container .pac-item:first-child';

exports.runTest = function(test) {
    casper.waitForSelector('input.street-address'); // wait for page to load
    casper.sendKeys('input.street-address', 'fake address here', {keepFocus: true});

    casper.waitUntilVisible(placeSelector);

    casper.then(function() {
        casper.click(placeSelector); // THIS DOES NOT DO ANYTHING

        // if its possible to trigger the event in the context of the page, I 
        // could probably do so. However, I've scoured google's docs and cannot find the 
        // event that is fired when a place is clicked upon.
        casper.evaluate(function() {
            //google.maps.places.Autocomplete.event.trigger(???);
        }); 
    });

    var formVal;
    casper.then(function() {
        formVal = casper.evaluate(function () {
            return $('input.street-address').val();
        });
    });
};
在前面的代码中,没有结果,输入没有填充,建议的结果也没有隐藏

我如何模拟用户输入自动完成输入的地址并继续单击其中一个建议结果的操作?

我遇到的一些资源提出了类似的问题:


自动完成输入元素没有附加单击事件,因此向其发送单击将无效。 尝试一个按键关闭事件:

casper.page.sendEvent('keydown', someKey);

我无法模拟自动完成结果的实际点击,但是通过使用向下箭头和回车键可以实现相同的结果

在自动完成输入中键入文本并确保保持焦点后,只需包含以下代码行,您的结果将由google places自动完成API正确设置

casper.then(function() {
    casper.page.sendEvent('keypress', casper.page.event.key.Down);
    casper.page.sendEvent('keypress', casper.page.event.key.Enter);
});

casper.thenEvaluate(function() {
    $(inputSelector).blur();
}, placeSelector, inputSelector);

该代码将选择第一个自动完成结果。

我有同样的问题。在深入研究了自动完成源代码之后,我提出了以下内容,您可以将其包括在CasperJS测试中,或者根据需要进行修改:

基本上,不要试图模拟鼠标点击结果,使用向下箭头和输入键选择第一个结果


autocomplete在触发前侦听key down和up事件,sendKeys方法不发送这些事件,因此我们使用sendEvent发送一些空键事件。然后,等待Resultls容器出现,然后发送向下箭头并输入关键事件以选择第一个结果。

您能提供完整的测试脚本吗?另外,您使用的是哪个版本的PhantomJS?@ArtjomB。我正在使用casperjs 1.1.1,我相信PhantomJS 2.1.7。一个完整的测试脚本将只是一个带有google autocomplete的html页面,并使用选择器“input.street-address”将其初始化为一个输入,谢谢您的回答,但是我不会尝试在输入框中键入内容。我已经完成了。我正在努力单击其中一个建议的结果。我必须添加:casper.wait(1000,函数(){casper.page.sendEvent('keydown',0);casper.page.sendEvent('keyup',0);});让它在我的情况下工作!
casper.then(function () {
    casper.sendKeys('input.street-address', 'fake address here', { keepFocus: true });
    casper.page.sendEvent('keydown', 0);
    casper.page.sendEvent('keyup', 0);
});
casper.waitUntilVisible('.pac-container .pac-item', function () {
    casper.page.sendEvent('keydown', casper.page.event.key.Down);
    casper.page.sendEvent('keydown', casper.page.event.key.Enter);
});