key_up และ key_down เป็นคำสั่งที่อยู่ใน Action Chains บน Selenium ซิลิเนี่ยม ที่ใช้สำหรับส่งค่าของปุ่มต่างๆ ออกไปทำงาน มีประโยชน์สำหรับการทำงานที่ซับซ้อนมากยิ่งขึ้น ซึ่งในคำสั่ง key_down จะเป็นการสั่งให้ส่งค่าของปุ่มออกไปโดยไม่ต้องปล่อย เป็นเหมือนการสั่งให้กดค้าง จากนั้นก็ส่งค่าของปุ่มที่สองออกไป และทำการใช้คำสั่ง key_up ที่ใช้เพื่อปล่อยปุ่มที่กดด้วยคำสั่ง key_down คำสั่งเหล่านี้จะใช้ในกรณีที่เราต้องการกดหลายๆปุ่ม อย่างเช่น Ctrl+C, Ctrl+V, Ctrl+A เป็นต้น ซึ่งในบทความนี้เราจะมาพูดถึงการใช้คำสั่ง key_up และ key_down ในภาษาไพทอนกัน
คำสั่ง key_up และ key_down
ในคำสั่ง key_down อย่างที่ได้กล่าวไป จะเป็นการสั่งให้กดปุ่มค้างเอาไว้โดยจะไม่ปล่อย ส่วนใหญ่แล้วในคำสั่งนี้จะใช้เพื่อกดปุ่มอย่าง Ctrl หรือ Alt ซึ่งจะต้องใช้คำสั่ง Keys. เข้ามาช่วยในการทำงาน จากนั้นก็ใช้คำสั่ง send_key() หรือ click() เพื่อทำการส่งค่าของปุ่มที่สองเข้าไป และใช้คำสั่ง key_up เพื่อปล่อยปุ่มแรก
Syntax
ActionChains(driver).key_down().send_keys().key_up().perform()
วิธีในการใช้งาน
ขั้นตอนแรก เราต้องทำการอิมพอร์ตโมดูลต่างๆที่จำเป็น เข้ามาใช้งานก่อน
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
จากนั้นให้ทำการกำหนด path และกำหนดเว็บที่ต้องการเปิด
driver = webdriver.Firefox(path)
driver.get(url)
เมื่อทำการกำหนด path และเปิดหน้าเว็บแล้ว ให้เราทำการส่งค่าของปุ่มออกไป โดยในคำสั่ง key_down ให้ส่งค่าปุ่มที่ต้องการกดค้าง จากนั้นส่งค่าของปุ่มที่สองตามเข้าไป และทำการใช้คำสั่ง key_up เพื่อปล่อยปุ่มแรก
ActionChains(driver).key_down().send_keys().key_up().perform()
ตัวอย่างการใช้งาน
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get('http://google.com')
x = driver.find_element_by_name('q')
x.send_keys('mindphp')
ActionChains(driver).key_down(Keys.CONTROL).send_keys('A').key_up(Keys.CONTROL).perform()
ผลลัพธ์
ผลลัพธ์การส่งค่าสองปุ่ม
และถ้าเราต้องการกดมากกว่าสองปุ่มเราก็สามารถทำได้ เพียงใส่ค่าเพิ่มเข้าไปเท่านั้นเอง อย่างเช่น
ActionChains(driver).key_down(Keys.CONTROL).send_keys('A', 'C', 'V', 'V').key_up(Keys.CONTROL).perform()
ผลลัพธ์
ผลลัพธ์การส่งค่าหลายปุ่ม
จากผลลัพธ์ก็จะเป็นการส่งค่า mindphp เข้าไปในช่องค้นหา และทำการใช้คำสั่งในการกดปุ่ม Control ค้างเอาไว้ และเมื่อเราทำการส่งค่า A พร้อมกับการกดปุ่ม Control ค้างเอาไว้ ก็จะเป็นการเลือกทั้งหมด และเราสามารถส่งค่าของปุ่มอื่นเพิ่มเข้าไปอย่าง C เพื่อทำการคัดลอก เพราะเนื่องจากว่าเรายังไม่ได้ใช้คำสั่ง key_up เพื่อปล่อยปุ่ม Control เราจึงสามารถทำการคัดลอกได้ เมื่อเราส่งค่าที่ต้องการเรียบก็ให้ใช้คำสั่ง key_up เพื่อปล่อยปุ่มแรก ไม่เช่นนั้นจะเป็นการกดปุ่มแรกค้างเอาไว้อยู่ตลอด และหากเราทำการส่งค่าอื่น ก็อาจทำให้เกิดข้อผิดพลาดขึ้นได้
เพียงเท่านี้เราก็สามารถใช้งานคำสั่ง key_up และ key_down เพื่อทำการกดปุ่มหลายปุ่ม หรือกดปุ่มแล้วคลิก ไปพร้อมๆกันได้แล้ว และนี่ก็จะเป็นอีกคำสั่งหนึ่งที่จำเป็นต่อการทำงานออโต้เมท เทสติ้ง เพราะจะช่วยให้เราสามารถจัดการกับปัญหาไม่สามารถกดหลายๆปุ่มพร้อมกันได้
เพิ่มเติมเกี่ยวกับคำสั่งที่เกี่ยวข้อง
แนะนำคำสั่ง .click (คลิ๊ก) ของโมดูล Selenium (ซิลิเนียม) ในภาษาไพธอน
แนะนำคำสั่ง .send_key (เซนด์คีย์) ของโมดูล Selenium (ซิลิเนียม) ในภาษาไพธอน
แนะนำคำสั่ง Keys.ENTER ของโมดูล selenium (ซิลิเนียม) ในภาษาไพทอน
แนะนำคำสั่ง Keys.RETURN ของโมดูล selenium (ซิลิเนียม) ในภาษาไพทอน