Нажатие на ход динамического пути с помощью Selenium - PullRequest
0 голосов
/ 22 ноября 2018

В SVG у вас могут быть вещи, которые можно кликать только при ударе, например, из-за отсутствия заполнения или из-за pointer-events: stroke.

Пример:

document.querySelector("#path1").addEventListener("click", function(e) {
  console.log("Click1!")
})
document.querySelector("#path2").addEventListener("click", function(e) {
  console.log("Click2!")
})
#path1:hover {
  stroke: red;
}

#path2:hover {
  stroke: green;
}
<svg height="300" width="300">
  <path d="M64,116 C100,100 400,100 96,39" stroke="blue" stroke-width="7" fill="none" id="path1" />
  <path d="M134,186 C100,100 400,100 126,69" stroke="blue" stroke-width="7" fill="none" id="path2" />
</svg>

В моем проекте я хочу написать тесты Selenium, поскольку у меня есть динамически сгенерированные SVG <path> s, на которые я хочу нажать, используя Selenium,проблема в том, что центр элемента 1 не обязательно кликабелен (поскольку только штрих пути).

Некоторые идеи, которые у меня были:

  • Нажатие с фиксированным смещением: Возможность, но, поскольку сгенерированный путь очень динамичен, это будет означать много поворотов со значением смещения, чтобы получить правильное значение и, возможно, необходимость много менять тестбудущего.

  • Инициирование события щелчка с помощью кода: Работало бы, но сделало бы тест менее полезным, так как таким образом он не проверял бы, является ли ход траекториидействительно кликабельны.Определенные ошибки могут быть обнаружены тестом таким образом.

  • Установка не-1037 * fill с помощью кода или замена / добавление заполняют прямоугольник вокруг <path>: Настройка fill может также не гарантировать, что по центру можно нажимать.<rect> будет работать, но тогда кликабельные области нескольких путей будут перекрываться, что может означать, что щелчок получит неправильный путь.

Ни один из этих подходов не идеален.Есть ли другие возможности?

(я использую Selenium для Python, но я в порядке с решениями Selenium для других языков программирования, поскольку обычно его легко портировать.)

1)Это позиция по умолчанию, на которую нажимает Selenium, если используется функция, в которой не указано смещение, или, скорее, это центр видимой области элемента со времени последней версии протокола WebDriver, но в моем случае использования все можно считать полностьюvisible.


PS Демонстрация, показывающая, почему установка fill на что-то отличное от none не поможет (или pointer-events на all):

document.querySelector("#path1").addEventListener("click", function(e) {
  console.log("Click1!")
})
document.querySelector("#path2").addEventListener("click", function(e) {
  console.log("Click2!")
})
#path1:hover {
  stroke: red;
}

#path2:hover {
  stroke: green;
}
<svg height="300" width="300">
  <path d="M64,116 C100,100 400,100 96,39" stroke="blue" stroke-width="7" fill="turquoise" id="path1" />
  <path d="M134,186 C100,100 400,100 126,69" stroke="blue" stroke-width="7" fill="yellow" id="path2" />
</svg>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...