如何从Google的位置输入字段中选择一项

时间:2019-10-04 10:54:26

标签: typescript protractor

你好, 每当我输入google位置下拉菜单时,我都无法验证它,我必须单击一个不适合我的选项。

这就是我所指的:https://developers-dot-devsite-v2-prod.appspot.com/maps/documentation/javascript/examples/places-autocomplete

let modal1 = element(by.className('classname'));

await modal1.element(by.css('[role = "combobox"]')).sendKeys("location");

我尝试发送向下箭头和Enter键,但不幸的是它没有用,请忽略睡眠,只有在那儿才能进行测试:


   await modal1.element(by.css('[role = "combobox"]')).sendKeys(protractor.Key.DOWN_ARROW);
   browser.sleep(2000);
   await modal1.element(by.css('[role = "combobox"]')).sendKeys(protractor.Key.ENTER);
   browser.sleep(2000);

我不想将鼠标移到某个位置。然后单击,因为我认为这是一个非常糟糕的解决方案,如果有人知道一些优雅的内容,请发布

1 个答案:

答案 0 :(得分:0)

我知道斗争。这是目前为我工作的东西

class Common {

    constructor() {

        /**
         * Elements
         */
        this.$locationDropdownContainer = element.all(by.xpath('//div[contains(@class,"pac-container") and not(contains(@style,"width: 0px")) and not(contains(@style,"display: none"))]')).last();
        this.$locationInput = $("#location");
        this.$$locationOptions = $$(".pac-container .pac-item .pac-item-query");
    }

    /**
     * Types provided location and selects the first option. CAUTION - very shaky, since relies of external API
     * @param criteria
     * @returns
     */
    async enterLocation(criteria) {
        await browser.sleep(350);
        await sendKeys(this.$locationInput, criteria);
        // wait a bit for API to respond
        await browser.sleep(400);
        // no idea why, but doesn't work all the time by JUST waiting, sometimes the input needs to be clicked
        try {
            await waitUntilElementHasAttribute(this.$locationDropdownContainer, "style", "display: none", false);
        } catch (e) {
            await this.$locationInput.click();
            await waitUntilElementHasAttribute(this.$locationDropdownContainer, "style", "display: none", false);
        }
        await this.$$locationOptions.get(0).click();
        await browser.sleep(350);
    }
}

sendKeys只是一种自定义键入方式,您可以使用input.sendKeys()

waitUntilElementHasAttribute是一种等待元素在属性中具有特定子字符串的方法。在这种情况下,位置下拉菜单容器(包装元素)不应具有包含“显示:无”的“样式”属性。

从JSDoc描述中可以看出,我选择了第一个选项,但是有可能找出选择特定选项的方法