如何让量角器在搜索框内单击?

How to get protractor to click inside a search box?

我希望能够在页面上的搜索框内单击,然后单击提交并生成几个 expect 语句。 到目前为止我有这个:

it('should redirect to the correct page', function(){
    browser.driver.findElement(by.id('header-search')).click();
    browser.driver.findElement(by.id('header-search')).sendKeys("aaa");
    //element.all(by.id('header-search')).sendKeys("tfgm");
    expect(browser.getCurrentUrl()).toEqual("http://localhost:8080/web/customer/account");
});

当我 运行 量角器时,它所做的只是单击框,而不是粘贴文本。有人知道出了什么问题吗?

在输入密钥之前无需单击搜索字段,您可以直接执行此操作。 如果用户应该在输入搜索词后点击提交按钮,请不要忘记让量角器点击它:

it('should redirect to the correct page', function(){
    element(by.id('header-search')).sendKeys('foo');
    $('[type="submit"]').click();
    //Expect-statements
});

我建议您查看 Elementor(Elementor Github Repo Here) 以帮助您确定要调用的元素。

当你安装它时,有一个错误(Link to issue)当前处于活动状态,但是它仍然会为你找到你的元素(给你 by.id/by.css/by.buttonText) 用于插入测试。

请记住,当您启动 Elementor 时,它将打开 Chrome 的一个新实例。在使用 Elementor 插件之前,您需要复制 chrome 选项卡(右键单击选项卡 > 复制)。

至于您的测试,您不需要单击搜索元素。 .sendKeys() 本质上将 "click" 该元素。考虑 sendKeys() 工作原理的方法是它找到您指定的元素,然后将您声明的键插入该元素。

我建议尝试将您的声明更改为:

this.headerSearch = by.id('headerSearch'); //Or any by.something element

it('should redirect to the correct page', function() {
  element(this.headerSearch).sendKeys("aaa\n"); // the \n will represent the "enter key"
});

您可以进一步参数化测试并分离您的语句以更好地遵循页面对象测试方法:

这组代码将在一个名为 SearchPage.js 的 PO 文件中(记住该文件需要导出):

this.headerSearch = by.id('headerSearch');

  this.setHeaderSearch = function(search) {
    element(this.headerSearch).sendKeys(search);
  };

这将在您的主要测试中(它将需要导入您的 SearchPage.js 页面对象文件):

it('should do something like input keys into element', function(){
    searchPO.setHeaderSearch('send some keys\n'); // the \n will represent the "enter key"
    expect(browser.getCurrentUrl()).toEqual("http://localhost:8080/web/customer/account");
  });

如果您能向每个人提供您测试的元素的 HTML,我们可以更好地帮助您。

希望对您有所帮助!

您使用的是哪个浏览器和量角器?如果您使用的是 Firefox,这应该是个问题。 sendKeys无法在 Firefox 浏览器上运行。