量角器.sendKeys()和browser.executeScript(“ arguments [0] .textContent = arguments [1];”,单元格,值)不适用于非输入字段

时间:2019-02-11 16:15:42

标签: protractor

我正在用TypeScript用Protractor和Jasmine编写自动化测试,但是我不能修改表中非输入字段的内容。

我已经尝试过使用量角器.sendKeys()和browser.executeScript(“ arguments [0] .textContent = arguments [2];”,单元格,值)。

量角器.sendKeys()无法按我的意愿进行修改,而是在单元格中创建了“ 0”值。

browser.executeScript(“ arguments [0] .textContent = arguments [2];”,单元格,值)确实至少在视觉上更改了单元格中的值。但是,一旦我尝试按页面上的“保存”按钮保存更改,更改将被放弃,并且单元格的值将恢复为默认值。

我也尝试了不使用.click()和.sendKeys()的情况。不起作用。

我的代码:

    const index = await this.components.indexOf(componentName);
    const cell = await element(by.css('[row-index="'+index+'"] [col-id="value"]'));
    await cell.click();
    await cell.sendKeys(value);
    await browser.executeScript("arguments[0].textContent= arguments[1];", cell, value);

包含相关单元格的DOM the DOM with the cell in question

表本身 The table itself 我希望在表中修改这些值并按“保存”按钮后,这些值将被修改并保留

2 个答案:

答案 0 :(得分:1)

更新后的答案:

基于您如何在评论中描述用户交互,我认为在这种情况下,将击键发送到浏览器应该适合您。

const index = await this.components.indexOf(componentName);
const cell = await element(by.css('[row-index="'+index+'"] [col-id="value"]'));
const spanThatContainsValue = cell.element(by.tagName('span'));

//Click on the cell in order to set the focus on field
await cell.click();

//Send the keystrokes to the focused field
await browser.actions().sendKeys(value).perform();

//use delay while testing so you can manually check if entered in field
await browser.driver.sleep(10*1000);

任何问题都让我知道

答案 1 :(得分:0)

最后,以下解决方案对我有用:

    const index = await this.components.indexOf(componentName);
    const cell = await element(by.css('[row-index="'+index+'"] [col-id="value"]'));
    await cell.click();
    await browser.switchTo().activeElement().sendKeys(value);
    await cell.sendKeys(Key.ENTER);