передать число в поле ввода, используя IJavaScriptExecutor.ExecuteScript () с ключевыми событиями - PullRequest
0 голосов
/ 18 апреля 2020

Я использую селен в C#. и я хочу передать число в поле ввода с помощью IJavaScriptExecutor.ExecuteScript ().

этот мой код:

int orderTypeIndex = -1;        // assigned by ComboBox.SelectedIndex;
int priceTypeIndex = -1;        // assigned by ComboBox.SelectedIndex;
string command = "";

private void button1_click(sender object, Event e)
{
    if (orderTypeIndex == 0)
    {
        command += "$('button[ng-type=\"order1\"]')[0].click(); "; 
    }
     else if (orderTypeIndex == 1)
    {
        command += "$('button[ng-type=\"order2\"]')[0].click(); "; 
    }

    if (priceTypeIndex == 0)
    {
        command += "$('inputField[ng-type=\"price\"]').val('1000'); ";      /***********************/
    }
     else if (priceTypeIndex == 1)
    {
        command += "$('inputField[ng-type=\"price\"]').val('2000'); ";      /***********************/
    }
     else if (priceTypeIndex == 2)
    {
        command += "$('inputField[ng-type=\"price\"]').val('3000'); ";      /***********************/
    }

    if (orderTypeIndex == 0){
        command += "$('button[ng-type=\"order1\"]')[0].click(); "; 
    }
    else if (orderTypeIndex == 1){
        command += "$('button[ng-type=\"order2\"]')[0].click(); "; 
    }

    command += "$('button[ng-type=\"submit\"]')[0].click(); ";  

    IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
    js.ExecuteScript(command);
    command = "";
}

inputPrices назначаются перед вызовом этого метода.

Проблема с этими строками комментариев:

Веб-сайт не принимает входное значение, когда значение передается input.val ('1000') , даже когда я запускаю с ним ключевые события. код ниже:

function trigger_event(element, key_code, type) {
    let event = jQuery.Event(type);
    event.which = event.keycode = event.charCode = key_code;
    element.trigger(event)
}
s = '1000';
input.focus();
input.val(s + ' ');
for (var i = 0; i < s.length; i++) {
    trigger_event(input, s.charCodeAt(i), 'keydown');
    input.click();
    trigger_event(input, s.charCodeAt(i), 'keypress');
    trigger_event(input, s.charCodeAt(i), 'keyup');
}
trigger_event(input, 13, 'keydown');
input.click();
trigger_event(input, 13, 'keypress');
trigger_event(input, 13, 'keyup');

все равно, сайт знает, откуда он взялся. Что мне делать?

Примечание Я не люблю использовать функции селена, потому что они слишком медленные для того, что я хочу. когда я использовал функции селена, выполнение действия занимало много времени.

Примечание Мне нужно использовать язык C# или Python, потому что это другие вещи, которые он продолжает делать в фоновом режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...