No meu caso de teste, tenho uma etapa em que o novo valor é definido como uma entrada não vazia (com o número do tipo). De acordo com a API webdriverIO, o método setValue deve limpar uma entrada primeiro e, em seguida, digitar um novo valor. Mas no meu caso, setValue acrescenta um novo valor ao existente.
Estou usando o webdriverIO 3.4.0 com servidor autônomo Selenium 2.52.0 e Firefox 44.0.2. Os formulários em meu aplicativo em teste são criados com a biblioteca React.js.
Você poderia postar os logs de selênio daquela parte onde você usa setValue?
Claro, aqui está aquela parte do registro de selênio:
12:16:04.077 INFO - Done: [clear: 17 [[FirefoxDriver: firefox on WINDOWS (2009724f-387c-4e20-8dc2-92df612798a8)] -> xpath: (//button[.="Przesy?ka kurierska"]/../..//input)[3]]]
12:16:04.081 INFO - Executing: [send keys: 17 [[FirefoxDriver: firefox on WINDOWS (2009724f-387c-4e20-8dc2-92df612798a8)] -> xpath: (//button[.="Przesy?ka kurierska"]/../..//input)[3]], [5]])
12:16:04.104 INFO - Done: [clear: 18 [[FirefoxDriver: firefox on WINDOWS (2009724f-387c-4e20-8dc2-92df612798a8)] -> xpath: (//button[.="List polecony ekonomiczny"]/../..//input)[3]]]
12:16:04.110 INFO - Executing: [send keys: 18 [[FirefoxDriver: firefox on WINDOWS (2009724f-387c-4e20-8dc2-92df612798a8)] -> xpath: (//button[.="List polecony ekonomiczny"]/../..//input)[3]], [5]])
12:16:04.135 INFO - Done: [clear: 19 [[FirefoxDriver: firefox on WINDOWS (2009724f-387c-4e20-8dc2-92df612798a8)] -> xpath: (//button[.="List polecony priorytetowy"]/../..//input)[3]]]
12:16:04.140 INFO - Executing: [send keys: 19 [[FirefoxDriver: firefox on WINDOWS (2009724f-387c-4e20-8dc2-92df612798a8)] -> xpath: (//button[.="List polecony priorytetowy"]/../..//input)[3]], [1, 0]])
Estou vendo o mesmo problema. As entradas não são apagadas (nem com setValue () e nem com clearElement ()). Novos valores são acrescentados.
12:41:57.165 INFO - Executing: [find elements: By.cssSelector: input[name=email]])
12:41:57.183 INFO - Done: [find elements: By.cssSelector: input[name=email]]
12:41:57.191 INFO - Executing: [clear: 3 [[ChromeDriver: chrome on MAC (1f3151b777f3aaf6b39852c72fc62d1a)] -> css selector: input[name=email]]])
12:41:57.219 INFO - Done: [clear: 3 [[ChromeDriver: chrome on MAC (1f3151b777f3aaf6b39852c72fc62d1a)] -> css selector: input[name=email]]]
12:41:57.227 INFO - Executing: [send keys: 3 [[ChromeDriver: chrome on MAC (1f3151b777f3aaf6b39852c72fc62d1a)] -> css selector: input[name=email]], [t, e, s, t, @, t, e, s, t, ., t, e, s, t]])
12:41:57.295 INFO - Done: [send keys: 3 [[ChromeDriver: chrome on MAC (1f3151b777f3aaf6b39852c72fc62d1a)] -> css selector: input[name=email]], [t, e, s, t, @, t, e, s, t, ., t, e, s, t]]
Estou usando o webdriverio 4.0.3 e o mercúrio para renderizar o html.
Parece que o comando foi executado com sucesso. Então, parece ser um problema do Chromedriver.
Enfrentou o mesmo problema. A entrada não foi limpa com clearElement () nem setValue ().
No entanto, começa a funcionar para mim quando clico na entrada ou escrevo algo antes de limpar (estou usando cucumberjs - e por algum motivo estranho não funciona quando clico / escrevo na mesma etapa, mas funciona bem se eu fizer isso na etapa anterior).
PS Estou usando selênio: "2.48.2", chromedriver: "2.20", webdriverio: "2.4.5". ReactJS.
Você poderia atualizar o servidor autônomo de selênio e tentar novamente?
@adolatowska Acabei de executar um teste simples (veja abaixo) com a mesma versão do webdriverio, mesmo servidor autônomo de selênio, mas FF diferente (45.0.1) e funciona bem para mim. Para sua informação, @ christian-bromann
var webdriverio = require('../webdriverio');
var options = {
desiredCapabilities: {
browserName: 'firefox'
}
};
webdriverio
.remote(options)
.init()
.url('http://www.google.co.uk')
.setValue('#lst-ib', 'test')
.pause(5000)
.setValue('#lst-ib', 'arek')
.pause(5000)
.end();
Selenoum Logs abaixo
14:05:56.883 INFO - Selenium Server is up and running
14:06:03.154 INFO - Executing: [new session: Capabilities [{rotatable=true, locationContextEnabled=true, loggingPrefs=org.openqa.selenium.logging.LoggingPreferences<strong i="12">@6de9b74d</strong>, browserName=firefox, javascriptEnabled=true, handlesAlerts=true, version=, platform=ANY, requestOrigins={name=webdriverio, version=3.4.0, url=http://webdriver.io}}]])
14:06:03.171 INFO - Creating a new session for Capabilities [{rotatable=true, locationContextEnabled=true, loggingPrefs=org.openqa.selenium.logging.LoggingPreferences<strong i="13">@6de9b74d</strong>, browserName=firefox, javascriptEnabled=true, handlesAlerts=true, version=, platform=ANY, requestOrigins={name=webdriverio, version=3.4.0, url=http://webdriver.io}}]
14:06:06.831 INFO - Done: [new session: Capabilities [{rotatable=true, locationContextEnabled=true, loggingPrefs=org.openqa.selenium.logging.LoggingPreferences<strong i="14">@6de9b74d</strong>, browserName=firefox, javascriptEnabled=true, handlesAlerts=true, version=, platform=ANY, requestOrigins={name=webdriverio, version=3.4.0, url=http://webdriver.io}}]]
14:06:06.852 INFO - Executing: [get: http://www.google.co.uk])
14:06:08.377 INFO - Done: [get: http://www.google.co.uk]
14:06:08.410 INFO - Executing: [find elements: By.id: lst-ib])
14:06:08.514 INFO - Done: [find elements: By.id: lst-ib]
14:06:08.530 INFO - Executing: [clear: 0 [[FirefoxDriver: firefox on MAC (5649de47-170c-d74d-b813-018cfa7da030)] -> id: lst-ib]])
14:06:08.623 INFO - Done: [clear: 0 [[FirefoxDriver: firefox on MAC (5649de47-170c-d74d-b813-018cfa7da030)] -> id: lst-ib]]
14:06:08.633 INFO - Executing: [send keys: 0 [[FirefoxDriver: firefox on MAC (5649de47-170c-d74d-b813-018cfa7da030)] -> id: lst-ib], [t, e, s, t]])
14:06:08.716 INFO - Done: [send keys: 0 [[FirefoxDriver: firefox on MAC (5649de47-170c-d74d-b813-018cfa7da030)] -> id: lst-ib], [t, e, s, t]]
14:06:13.729 INFO - Executing: [find elements: By.id: lst-ib])
14:06:13.741 INFO - Done: [find elements: By.id: lst-ib]
14:06:13.750 INFO - Executing: [clear: 0 [[FirefoxDriver: firefox on MAC (5649de47-170c-d74d-b813-018cfa7da030)] -> id: lst-ib]])
14:06:13.780 INFO - Done: [clear: 0 [[FirefoxDriver: firefox on MAC (5649de47-170c-d74d-b813-018cfa7da030)] -> id: lst-ib]]
14:06:13.787 INFO - Executing: [send keys: 0 [[FirefoxDriver: firefox on MAC (5649de47-170c-d74d-b813-018cfa7da030)] -> id: lst-ib], [a, r, e, k]])
14:06:13.851 INFO - Done: [send keys: 0 [[FirefoxDriver: firefox on MAC (5649de47-170c-d74d-b813-018cfa7da030)] -> id: lst-ib], [a, r, e, k]]
14:06:18.861 INFO - Executing: [delete session: f39e1174-0b7a-42b2-9d9d-1ac3505416f8])
14:06:19.596 INFO - Done: [delete session: f39e1174-0b7a-42b2-9d9d-1ac3505416f8]
Eu testei novamente com Selenium Standalone versão 2.53.0 e ambas as versões FF: 45.0.1 e 45.0.2. A situação é a mesma. Aqui está o log do Selenium executado no FF v.45.0.1:
> 19:26:55.659 INFO - Executing: [clear: 22 [[FirefoxDriver: firefox on WINDOWS (c9c978bb-acc5-4693-a830-5676e4c0b35d)] -> xpath: (//button[.="Przesy?ka kurierska"]/../..//input)[3]]])
> 19:26:55.664 INFO - Done: [find elements: By.xpath: (//button[.="List polecony ekonomiczny"]/../..//input)[3]]
> 19:26:55.671 INFO - Executing: [clear: 23 [[FirefoxDriver: firefox on WINDOWS (c9c978bb-acc5-4693-a830-5676e4c0b35d)] -> xpath: (//button[.="List polecony ekonomiczny"]/../..//input)[3]]])
> 19:26:55.677 INFO - Done: [find elements: By.xpath: (//button[.="List polecony priorytetowy"]/../..//input)[3]]
> 19:26:55.684 INFO - Executing: [clear: 24 [[FirefoxDriver: firefox on WINDOWS (c9c978bb-acc5-4693-a830-5676e4c0b35d)] -> xpath: (//button[.="List polecony priorytetowy"]/../..//input)[3]]])
> 19:26:55.700 INFO - Done: [clear: 22 [[FirefoxDriver: firefox on WINDOWS (c9c978bb-acc5-4693-a830-5676e4c0b35d)] -> xpath: (//button[.="Przesy?ka kurierska"]/../..//input)[3]]]
> 19:26:55.704 INFO - Executing: [send keys: 22 [[FirefoxDriver: firefox on WINDOWS (c9c978bb-acc5-4693-a830-5676e4c0b35d)] -> xpath: (//button[.="Przesy?ka kurierska"]/../..//input)[3]], [5]])
> 19:26:55.721 INFO - Done: [clear: 23 [[FirefoxDriver: firefox on WINDOWS (c9c978bb-acc5-4693-a830-5676e4c0b35d)] -> xpath: (//button[.="List polecony ekonomiczny"]/../..//input)[3]]]
> 19:26:55.726 INFO - Executing: [send keys: 23 [[FirefoxDriver: firefox on WINDOWS (c9c978bb-acc5-4693-a830-5676e4c0b35d)] -> xpath: (//button[.="List polecony ekonomiczny"]/../..//input)[3]], [5]])
> 19:26:55.741 INFO - Done: [clear: 24 [[FirefoxDriver: firefox on WINDOWS (c9c978bb-acc5-4693-a830-5676e4c0b35d)] -> xpath: (//button[.="List polecony prioryteto
> wy"]/../..//input)[3]]]
> 19:26:55.745 INFO - Executing: [send keys: 24 [[FirefoxDriver: firefox on WINDOWS (c9c978bb-acc5-4693-a830-5676e4c0b35d)] -> xpath: (//button[.="List polecony priorytetowy"]/../..//input)[3]], [1, 0]])
> 19:26:55.780 INFO - Done: [send keys: 22 [[FirefoxDriver: firefox on WINDOWS (c9c978bb-acc5-4693-a830-5676e4c0b35d)] -> xpath: (//button[.="Przesy?ka kurierska"]/../..//input)[3]], [5]]
> 19:26:55.814 INFO - Done: [send keys: 23 [[FirefoxDriver: firefox on WINDOWS (c9c978bb-acc5-4693-a830-5676e4c0b35d)] -> xpath: (//button[.="List polecony ekonomiczny"]/../..//input)[3]], [5]]
> 19:26:55.859 INFO - Done: [send keys: 24 [[FirefoxDriver: firefox on WINDOWS (c9c978bb-acc5-4693-a830-5676e4c0b35d)] -> xpath: (//button[.="List polecony priorytetowy"]/../..//input)[3]], [1, 0]]
e aqui está o log da execução no FF v. 45.0.2:
> 19:31:35.154 INFO - Executing: [clear: 22 [[FirefoxDriver: firefox on WINDOWS (a1c5eedb-cbcb-40af-8c64-142651c20683)] -> xpath: (//button[.="List polecony priorytetowy"]/../..//input)[3]]])
> 19:31:35.160 INFO - Done: [find elements: By.xpath: (//button[.="List polecony ekonomiczny"]/../..//input)[3]]
> 19:31:35.165 INFO - Executing: [clear: 23 [[FirefoxDriver: firefox on WINDOWS (a1c5eedb-cbcb-40af-8c64-142651c20683)] -> xpath: (//button[.="List polecony ekonomiczny"]/../..//input)[3]]])
> 19:31:35.176 INFO - Done: [find elements: By.xpath: (//button[.="Przesy?ka kurierska"]/../..//input)[3]]
> 19:31:35.181 INFO - Executing: [clear: 24 [[FirefoxDriver: firefox on WINDOWS (a1c5eedb-cbcb-40af-8c64-142651c20683)] -> xpath: (//button[.="Przesy?ka kurierska"]/../..//input)[3]]])
> 19:31:35.199 INFO - Done: [clear: 22 [[FirefoxDriver: firefox on WINDOWS (a1c5eedb-cbcb-40af-8c64-142651c20683)] -> xpath: (//button[.="List polecony priorytetowy"]/../..//input)[3]]]
> 19:31:35.204 INFO - Executing: [send keys: 22 [[FirefoxDriver: firefox on WINDOWS (a1c5eedb-cbcb-40af-8c64-142651c20683)] -> xpath: (//button[.="List polecony priorytetowy"]/../..//input)[3]], [1, 0]])
> 19:31:35.219 INFO - Done: [clear: 23 [[FirefoxDriver: firefox on WINDOWS (a1c5eedb-cbcb-40af-8c64-142651c20683)] -> xpath: (//button[.="List polecony ekonomiczny"]/../..//input)[3]]]
> 19:31:35.223 INFO - Executing: [send keys: 23 [[FirefoxDriver: firefox on WINDOWS (a1c5eedb-cbcb-40af-8c64-142651c20683)] -> xpath: (//button[.="List polecony ekonomiczny"]/../..//input)[3]], [5]])
> 19:31:35.239 INFO - Done: [clear: 24 [[FirefoxDriver: firefox on WINDOWS (a1c5eedb-cbcb-40af-8c64-142651c20683)] -> xpath: (//button[.="Przesy?ka kurierska"]/../..//input)[3]]]
> 19:31:35.244 INFO - Executing: [send keys: 24 [[FirefoxDriver: firefox on WINDOWS (a1c5eedb-cbcb-40af-8c64-142651c20683)] -> xpath: (//button[.="Przesy?ka kurierska"]/../..//input)[3]], [5]])
> 19:31:35.298 INFO - Done: [send keys: 22 [[FirefoxDriver: firefox on WINDOWS (a1c5eedb-cbcb-40af-8c64-142651c20683)] -> xpath: (//button[.="List polecony priorytetowy"]/../..//input)[3]], [1, 0]]
> 19:31:35.337 INFO - Done: [send keys: 23 [[FirefoxDriver: firefox on WINDOWS (a1c5eedb-cbcb-40af-8c64-142651c20683)] -> xpath: (//button[.="List polecony ekonomiczny"]/../..//input)[3]], [5]]
> 19:31:35.372 INFO - Done: [send keys: 24 [[FirefoxDriver: firefox on WINDOWS (a1c5eedb-cbcb-40af-8c64-142651c20683)] -> xpath: (//button[.="Przesy?ka kurierska"]/../..//input)[3]], [5]]
@adolatowska / @ christian-bromann sou só eu ou "claro" enviar para (//button[.="Przesy?ka kurierska "] /../..// input) [3]]]) mas " enviar keys " para (//button[.="Przesy?ka kurierska"] /../..// input) [3]]
Observe o "]" extra no comando claro no final. Isso explicaria por que não está esclarecendo os valores.
@adolatowska você pode tentar usar um seletor diferente?
Fechando por inatividade. Estou feliz em abrir novamente, se ainda for válido.
Eu também tenho o mesmo problema com FF 47-49
Estou tendo o mesmo problema com Firefox 53.0.2 e Chrome 58.0.3029.110 e selênio-standalone 6.4.1. Estou testando em um aplicativo React, se isso ajudar em tudo.
Estou adicionando uma resolução aqui e no # 891 para a solução alternativa que usei. Parece que nosso React DOM não está sendo atualizado sempre que um elemento é limpo com .clearElement () e, em seguida, definido novamente com .setValue (), então tive que retroceder no campo um caractere por vez:
let x = browser.getValue(selector);
for (let i = 0; i < x.length; i++) { browser.setValue(selector, "\uE003").pause(100); };
browser.setValue(selector, newValue);
@jkwaldrip Esta solução alternativa não funcionou para mim. Usamos react-redux para nosso front end e usando setValue o valor é sempre acrescentado, mesmo se eu limpar o campo usando clearElement (). ou com backspaces conforme fornecido em seu código acima. Alguma outra etapa que posso tentar?
Ainda houve alguma solução. Ainda estou vendo o mesmo problema. Aqui está minha configuração
"wdio-chromedriver-service": "^0.1.2",
"webdriverio": "^4.8.0"
selenium-server-standalone-2.53.1.jar
O mesmo problema aqui.
Selenium Server 3.14.0
Chromedriver 2.41
Mesmo problema reintroduzido aqui após a atualização para o Chromedriver 2.43 - agora você precisa confiar na sugestão de @jkwaldrip com retrocesso.
Por favor, tente isso, funcionou para mim
Precisamos primeiro colocar o foco no elemento, depois limpá-lo e escrever coisas nele.
.click('input[aria-label=Login]') // Workaround to make .clearValue() possible.
.clearValue('input[aria-label=Login]') // Without clearValue() the value would be appended.
.setValue('input[aria-label=Login]', 'new_value')
Foi o que fiz até hoje, onde atualizei para o Chromedriver mais recente, e ele parou de funcionar.
Eu posso confirmar isso.
Por favor, reabra o relatório de bug.
@ MartinX3 você pode provar que esse bug está relacionado ao WebdriverIO? setValue
não mudou na última vez, então parece que o Chrome introduziu essa regressão.
Oh, você pode nos ajudar fornecendo um link onde colocar esta solicitação de bug?
Continuo meu trabalho com selênio na próxima semana.
Comecei a enfrentar esse problema também para o aplicativo Rea desde que atualizei
"wdio-selenium-standalone-service": de "0.0.10" a "0.0.11".
Caso outras pessoas estejam tendo esse problema, aqui está a solução que encontrei:
let valueLength = browser.getValue(id).length
let backSpaces = new Array(valueLength).fill('Backspace')
browser.setValue(id, backSpaces)
A solução que @jkwaldrip ofereceu funcionou para mim, mas era muito lenta. Isso retrocede tão rápido quanto a digitação normal.
Alguém pode confirmar se este é realmente um problema do chromedriver e como o determinaram?
eu posso encontrar uma boa solução. então ... eu consegui
browser.addCommand("clearValue2", async function () {
let valueLength = this.getValue().length
let backSpaces = new Array(valueLength).fill('Backspace')
this.setValue(backSpaces)
}, true);
browser.addCommand("setValue2", async function (val) {
this.clearValue2();
this.setValue(val)
}, true);
Mesmo problema para:
"webdriverio": "5.7.15"
Se você usar:
selector.click()
selector.clearValue()
selector.setValue()
clearValue()
também é ignorado e você tem o mesmo problema.
Para lidar com esse problema, encontrei esta solução e funciona para mim:
selector.doubleClick() //selects the text written in the input
browser.keys("Delete") //removes old value
selector.setValue() //sets new Value
1. in WebdriverIO v4, i tried to edit the text field by clear text (which contains special charactes like @, +, _) in text field by below following step. Eventhough it was not successful.
example: text=> [email protected]
step1:browser.clearElement(selector);
step2:browser.execute(function () {
document.querySelector(>>>Cssselector<<<).value="";
});
step3: browser.doubleClick(selector);
browser.keys("Delete");
step4: browser.click(selector);
browser.keys(['Meta',a]);
browser.keys('Meta');
browser.keys('Delete');
Note: below step is resolved this issue.
var count= browser.getAttribute(selector, value).length;
for (var i=0;i<count;i++)
{
if (browser.getAttribute(selector, value)=='')
break;
}
else
{
browser.doubleClick(selector);
browser.keys("Delete");
}
browser.pause(200);
// limpará seu campo de texto facilmente.
Nota: Você pode adicionar novo texto nesse campo de texto.
Só quero deixar meus dois centavos sobre isso, já que as coisas acima nunca funcionaram. Fiz uma função de utilidade e passei no elemento (com TypeScript).
export const deleteValue = async (browser: TestBrowser, selector: WebdriverIOAsync.Element) => {
const value = await selector.getValue()
const count = value.length
for (var i=0;i<count;i++) {
await selector.click();
await browser.keys(['Meta', 'a']);
await browser.keys(['Backspace']);
}
/*Modifier like Ctrl, Shift, Alt and Meta will stay pressed so you need to trigger them again to release them.*/
await browser.keys(['Meta', 'a']);
await browser.pause(200);
}
e eu passo assim ...
const nameInput = await browser.$(`input[name=name]`);
await deleteValue(browser, nameInput);
await nameInput.setValue('John Doe');
Obtendo o mesmo problema aqui. Quando há um valor definido para a entrada, a função de limpeza falha (não importa se o foco está definido na entrada). Mas se não houver um valor padrão e digitarmos AND e limparmos, isso funciona.
@NBukuri sua solução só funciona para entradas que não contenham caracteres especiais.
@defusiner
para coisas de caracteres especiais, tente obter o comprimento desse campo de entrada específico. aplique loop para excluir clicando duas vezes no campo de texto até text == ""
var count = browser.getAttribute (seletor, valor) .length;
para (var i = 0; i
if (browser.getAttribute (seletor, valor) == '')
pausa;
}
outro
{
browser.doubleClick (seletor);
browser.keys ("Excluir");
}
browser.pause (200);
agora envie o valor de entrada para o campo de texto correspondente.
this.inputfield.setValue (inputValue)
@Rajendiransivaprasath
Fizemos exatamente assim. Queria apenas mencionar que o duplo clique não funciona quando há mais de 1 palavra ou caracteres especiais na entrada.
Lutei com isso por um tempo e escrevi uma solução estranha.
function clearInputValue(inputElement) {
while (inputElement.getValue() !== '') {
inputElement.doubleClick();
browser.keys('Delete');
inputElement.clearValue();
}
}
Quando eu executo os testes em meu Mac (local) clearValue () está funcionando bem, mas quando os mesmos testes são executados no ambiente Docker do Linux (circleci / node: 10-buster-browsers-legacy), preciso usar a solução alternativa que @ bob-laz mencionou. Poderia ser melhor se o mesmo fosse corrigido para o ambiente Linux também.
Comentários muito úteis
Caso outras pessoas estejam tendo esse problema, aqui está a solução que encontrei:
A solução que @jkwaldrip ofereceu funcionou para mim, mas era muito lenta. Isso retrocede tão rápido quanto a digitação normal.
Alguém pode confirmar se este é realmente um problema do chromedriver e como o determinaram?