I am trying to automate a web application.I am supposed to click on a link and it opens an print window.I cant achieve that in selenium automation.So i used ctypes to do the keypress like tab,enter key events.Below is the library that i have developed to achieve that.I do the events by calling the respective methods.
import ctypes
import time
SendInput = ctypes.windll.user32.SendInput
# C struct redefinitions
PUL = ctypes.POINTER(ctypes.c_ulong)
class KeyBdInput(ctypes.Structure):
_fields_ = [("wVk", ctypes.c_ushort),
("wScan", ctypes.c_ushort),
("dwFlags", ctypes.c_ulong),
("time", ctypes.c_ulong),
("dwExtraInfo", PUL)]
class HardwareInput(ctypes.Structure):
_fields_ = [("uMsg", ctypes.c_ulong),
("wParamL", ctypes.c_short),
("wParamH", ctypes.c_ushort)]
class MouseInput(ctypes.Structure):
_fields_ = [("dx", ctypes.c_long),
("dy", ctypes.c_long),
("mouseData", ctypes.c_ulong),
("dwFlags", ctypes.c_ulong),
("time",ctypes.c_ulong),
("dwExtraInfo", PUL)]
class Input_I(ctypes.Union):
_fields_ = [("ki", KeyBdInput),
("mi", MouseInput),
("hi", HardwareInput)]
class Input(ctypes.Structure):
_fields_ = [("type", ctypes.c_ulong),
("ii", Input_I)]
# Actuals Functions
class KeyEvents :
def PressKey(self,hexKeyCode):
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.ki = KeyBdInput( hexKeyCode, 0x48, 0, 0, ctypes.pointer(extra) )
x = Input( ctypes.c_ulong(1), ii_ )
SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
def ReleaseKey(self,hexKeyCode):
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.ki = KeyBdInput( hexKeyCode, 0x48, 0x0002,0,ctypes.pointer(extra) )
x = Input( ctypes.c_ulong(1), ii_ )
SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
def PressAltTab(self):
'''
Press Alt+Tab and hold Alt key for 2 seconds in order to see the overlay
'''
self.PressKey(0x012) #Alt
self.PressKey(0x09) #Tab
self.ReleaseKey(0x09) #~Tab
time.sleep(2)
self.ReleaseKey(0x012)
def PressTab(self):
'''
Press Tab Key
'''
#self.AltTab()
self.PressKey(0x09) #Tab
self.ReleaseKey(0x09)
def PressEnter(self):
'''
PressEnter
'''
#self.AltTab()
self.PressKey(0x0D)#Enter Key
self.ReleaseKey(0x0D)
But now when i use the code in linux i get the below error
File "KeyEvents.py", line 4, in <module>
SendInput = ctypes.windll.user32.SendInput
AttributeError: 'module' object has no attribute 'windll'
I dont understand what had gone wrong here.I am very new to python.Kindly help me out here.What should i be doing to achieve the keypress events in linux?