清除();方法不适用于 React 输入
clear(); method not working for React inputs
我们正在开发的大部分应用程序都是用 Angular 制作的,但我们正在慢慢过渡到在 ReactJS 中重建它。 clear()
在 Angular 输入上仍然可以完美运行,但在 React 输入上绝对没有任何作用
我很久以前写了一个可重用的函数:
const clearAndSendKeys = async (input, text) => {
await input.clear();
await input.sendKeys(text);
};
上述函数在 angular 元素上运行良好,但 clear()
部分对使用 React 制作的页面没有任何影响。
我也试过不使用该功能,只是使用
await input.clear();
await input.sendKeys(text);
也不行。
我将粘贴其中一个输入和我用来定位它的方法
<div widths="equal" class="required field">
<label>
"Address"
::after
</label>
<div class="ui input">
<input name="address1" placeholder type="text" value="fake address">
</div>
</div>
定位器:
const addressInput = element(by.name('address1'));
更新
我可以通过在循环中使用退格键来解决这个问题。这不是理想的方法,但它有效(理想的方法是 clear()
有效
this.clearInput = async (input) => {
const inputValue = await input.getAttribute('value');
const valueLength = await inputValue.length;
for (let i = 0; i < valueLength; i++) {
await input.sendKeys(protractor.Key.BACK_SPACE);
};
};
如果您尝试 输入
会怎样
let reset = async $elem =>
browser.executeScript('return arguments[0].reset()', $elem.getWebElement());
如果不起作用请告诉我
P.S.
好吧...我知道你会在下面看到的是丑陋和愚蠢的...但它在我去年测试的所有 16 个应用程序中为我完成了工作
sendKeys: async ($element, keyCode = '') => {
let size = await $element.getSize();
let clickCoordinates = {
x: Math.round(size.width - 3),
y: Math.round(size.height / 2),
};
let value = await $element.getAttribute('value');
for (let i = 0; i < value.length; i++) {
await $element.sendKeys(protractor.Key.BACK_SPACE);
}
await $element.clear();
// see a pic below, for example of where I click
await browser
.actions()
.mouseMove($element, clickCoordinates)
.click()
.perform();
await $element.sendKeys('1');
await $element.sendKeys(protractor.Key.BACK_SPACE);
await $element.sendKeys(keyCode);
},
我可以通过在循环中使用退格键来解决这个问题。这不是理想的方法,但它有效(理想的方法是 clear() 工作
this.clearInput = async (input) => {
const inputValue = await input.getAttribute('value');
const valueLength = await inputValue.length;
for (let i = 0; i < valueLength; i++) {
await input.sendKeys(protractor.Key.BACK_SPACE);
};
};
这不是最好的解决方案,但目前可以解决问题。虽然我很想知道为什么 clear()
方法在这些反应输入组件中不起作用
我们正在开发的大部分应用程序都是用 Angular 制作的,但我们正在慢慢过渡到在 ReactJS 中重建它。 clear()
在 Angular 输入上仍然可以完美运行,但在 React 输入上绝对没有任何作用
我很久以前写了一个可重用的函数:
const clearAndSendKeys = async (input, text) => {
await input.clear();
await input.sendKeys(text);
};
上述函数在 angular 元素上运行良好,但 clear()
部分对使用 React 制作的页面没有任何影响。
我也试过不使用该功能,只是使用
await input.clear();
await input.sendKeys(text);
也不行。
我将粘贴其中一个输入和我用来定位它的方法
<div widths="equal" class="required field">
<label>
"Address"
::after
</label>
<div class="ui input">
<input name="address1" placeholder type="text" value="fake address">
</div>
</div>
定位器:
const addressInput = element(by.name('address1'));
更新
我可以通过在循环中使用退格键来解决这个问题。这不是理想的方法,但它有效(理想的方法是 clear()
有效
this.clearInput = async (input) => {
const inputValue = await input.getAttribute('value');
const valueLength = await inputValue.length;
for (let i = 0; i < valueLength; i++) {
await input.sendKeys(protractor.Key.BACK_SPACE);
};
};
如果您尝试
let reset = async $elem =>
browser.executeScript('return arguments[0].reset()', $elem.getWebElement());
如果不起作用请告诉我
P.S.
好吧...我知道你会在下面看到的是丑陋和愚蠢的...但它在我去年测试的所有 16 个应用程序中为我完成了工作
sendKeys: async ($element, keyCode = '') => {
let size = await $element.getSize();
let clickCoordinates = {
x: Math.round(size.width - 3),
y: Math.round(size.height / 2),
};
let value = await $element.getAttribute('value');
for (let i = 0; i < value.length; i++) {
await $element.sendKeys(protractor.Key.BACK_SPACE);
}
await $element.clear();
// see a pic below, for example of where I click
await browser
.actions()
.mouseMove($element, clickCoordinates)
.click()
.perform();
await $element.sendKeys('1');
await $element.sendKeys(protractor.Key.BACK_SPACE);
await $element.sendKeys(keyCode);
},
我可以通过在循环中使用退格键来解决这个问题。这不是理想的方法,但它有效(理想的方法是 clear() 工作
this.clearInput = async (input) => {
const inputValue = await input.getAttribute('value');
const valueLength = await inputValue.length;
for (let i = 0; i < valueLength; i++) {
await input.sendKeys(protractor.Key.BACK_SPACE);
};
};
这不是最好的解决方案,但目前可以解决问题。虽然我很想知道为什么 clear()
方法在这些反应输入组件中不起作用