Один скрипт для нажатия кнопок на двух разных страницах? - PullRequest
1 голос
/ 15 мая 2019

Я управляю сайтом с несколькими встроенными веб-страницами.Это форма Mantis Bug Tracker, которая используется для отправки билетов.Как только заявка создана, ей дается несколько кнопок, Закрыть, назначить и т. Д. Я ищу, чтобы выбрать кнопку закрытия, которую я уже могу сделать, затем нажмите в области заключительных заметок, которую я смог определить, основываясь на знании элементови используя document.querySelectorAll("input[value=Close]")[0].click().

Это работает.Однако это делается с помощью двух скриптов.

Я пытаюсь сжать его в один сценарий.

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

Сценарий 1:

document.onkeyup = function(e) {
    if (e.which == 117) {
        document.querySelectorAll("input[value=Close]")[0].click();
    } else if (e.ctrlKey && e.which == 66) {
        alert("Ctrl + B shortcut combination was pressed");
    } else if (e.ctrlKey && e.altKey && e.which == 89) {
        alert("Ctrl + Alt + Y shortcut combination was pressed");
    }
}


Сценарий 2:

var EffectiveDate = "";
document.onkeyup = function(e) {
    if (e.which == 117) {
        document.querySelectorAll("textarea[name=bugnote_text]")[0].value = " ";
        document.querySelectorAll("input[value='Close Ticket']")[0].click();

    } else if (e.ctrlKey && e.which == 66) {
        alert("Ctrl + B shortcut combination was pressed");
    } else if (e.ctrlKey && e.altKey && e.which == 89) {
        alert("Ctrl + Alt + Y shortcut combination was pressed");
    }
}

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

Я могу найтиэлементы желательны и могут правильно выполнить указанный процесс, просто упрощая сценарий в один сценарий.Это, конечно, не работает так, как было дано, но работает в отдельных пользовательских скриптах.Возможно ли это?

Ответы [ 2 ]

1 голос
/ 16 мая 2019
  1. Чтобы скрипт выполнял одну и ту же вещь на 2 разных страницах, просто настройте директивы @match и / или @include так, чтобы они запускались на обеих страницах.
  2. Чтобы один скрипт выполнял разные вещи на 2 разных страницах:
    A) Убедитесь, что он запускается на обеих страницах на шаге 1.
    B) Проверьте location свойства, чтобы определить, какой код

Например:

// ==UserScript==
// @name     _Click on two pages
// @match    *://YOUR_SERVER.COM/PATH_FOO/*
// @match    *://YOUR_SERVER.COM/PATH_BAR/*
// @grant    none
// ==/UserScript==

document.addEventListener ("keydown", zEvent => {
    if (zEvent.which == 117) {  //  F6
        zEvent.preventDefault();
        if (location.pathname.includes("/PATH_FOO/") ) {
            document.querySelectorAll("input[value=Close]")[0].click();
        }
        else if (location.pathname.includes("/PATH_BAR/") ) {
            document.querySelectorAll("textarea[name=bugnote_text]")[0].value = " ";
            document.querySelectorAll("input[value='Close Ticket']")[0].click();
        }
    }
    else if (zEvent.ctrlKey && zEvent.which == 66) {
        zEvent.preventDefault();
        alert("Ctrl + B shortcut combination was pressed");
    }
    else if (zEvent.ctrlKey && zEvent.altKey && zEvent.which == 89) {
        zEvent.preventDefault();
        alert("Ctrl + Alt + Y shortcut combination was pressed");
    }
} );

Некоторые другие проблемы с кодом вопроса:

  1. Используются уже определенныегорячие клавиши браузера (зависит от браузера и ОС).Поэтому используйте .preventDefault(), чтобы избежать побочных эффектов и дополнительных действий.
  2. Аналогичным образом, стрельба по keyup будет срабатывать слишком поздно, чтобы предотвратить действия по умолчанию (которые в основном стреляют по keydown).
  3. Не используйте .on... обработчики событий, используйте addEventListener.
  4. Отладка с помощью alert() раздражает и проблематична (она маскирует некоторые проблемы и может вызвать другие).Используйте console.log.
0 голосов
/ 15 мая 2019

Для этого можно использовать Селен .У него есть библиотеки для разных языков, и, поскольку он является инструментом, специально предназначенным для автоматизации тестирования, он может помочь вам в этом.

Вы также можете попробовать Selenium IDE и записать рабочий процесс, чтобы воспроизвести его.позже, когда это необходимо.

Надеюсь, это поможет!

...