Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
SeleniumHQ
GitHub Repository: SeleniumHQ/Selenium
Path: blob/trunk/rb/lib/selenium/webdriver/common/interactions/input_device.rb
1990 views
1
# frozen_string_literal: true
2
3
# Licensed to the Software Freedom Conservancy (SFC) under one
4
# or more contributor license agreements. See the NOTICE file
5
# distributed with this work for additional information
6
# regarding copyright ownership. The SFC licenses this file
7
# to you under the Apache License, Version 2.0 (the
8
# "License"); you may not use this file except in compliance
9
# with the License. You may obtain a copy of the License at
10
#
11
# http://www.apache.org/licenses/LICENSE-2.0
12
#
13
# Unless required by applicable law or agreed to in writing,
14
# software distributed under the License is distributed on an
15
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
# KIND, either express or implied. See the License for the
17
# specific language governing permissions and limitations
18
# under the License.
19
20
require 'securerandom'
21
22
module Selenium
23
module WebDriver
24
module Interactions
25
#
26
# Superclass for the input device sources
27
# Manages Array of Interaction instances for the device
28
#
29
# @api private
30
#
31
32
class InputDevice
33
attr_reader :name, :actions, :type
34
35
def initialize(name = nil)
36
@name = name || SecureRandom.uuid
37
@actions = []
38
end
39
40
def add_action(action)
41
raise TypeError, "#{action.inspect} is not a valid action" unless action.class < Interaction
42
43
@actions << action
44
end
45
46
def clear_actions
47
@actions.clear
48
end
49
50
def create_pause(duration = 0)
51
add_action(Pause.new(self, duration))
52
end
53
54
def encode
55
{type: type, id: name, actions: @actions.map(&:encode)} unless @actions.empty?
56
end
57
end # InputDevice
58
end # Interactions
59
end # WebDriver
60
end # Selenium
61
62