Selenium

     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()

ผลลัพธ์

ผลลัพธ์การส่งค่า Ctrl+A

ผลลัพธ์การส่งค่าสองปุ่ม

และถ้าเราต้องการกดมากกว่าสองปุ่มเราก็สามารถทำได้ เพียงใส่ค่าเพิ่มเข้าไปเท่านั้นเอง อย่างเช่น

ActionChains(driver).key_down(Keys.CONTROL).send_keys('A', 'C', 'V', 'V').key_up(Keys.CONTROL).perform()

ผลลัพธ์

ผลลัพธ์การส่งค่า Ctrl+A+C+V+V

ผลลัพธ์การส่งค่าหลายปุ่ม

     จากผลลัพธ์ก็จะเป็นการส่งค่า 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 (ซิลิเนียม) ในภาษาไพทอน

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
แนะนำการเดินทางและสถานที่ท่องเที่ยวในจังหวัดตรังและการเดินทางไปกรุงเทพ
โดย wightfall จ 22 เม.ย. 2024 3:41 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
20
จ 22 เม.ย. 2024 3:41 pm โดย wightfall View Topic แนะนำการเดินทางและสถานที่ท่องเที่ยวในจังหวัดตรังและการเดินทางไปกรุงเทพ
ติดตั้ง ESXi ใหม่ จำเป็นต้อง Format Harddisk ก่อนติดตั้งไหมครับ
โดย จิ๊กโก๋ ส 20 เม.ย. 2024 2:29 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
3
145
อ 23 เม.ย. 2024 2:24 pm โดย mindphp View Topic ติดตั้ง ESXi ใหม่ จำเป็นต้อง Format Harddisk ก่อนติดตั้งไหมครับ
แจ้งปัญหาโพสบทความลงในเว็บบอร์ดส่วนตัวไม่ได้
โดย internTk21 ศ 19 เม.ย. 2024 11:56 am บอร์ด MindPHP News & Feedback
1
46
ศ 19 เม.ย. 2024 12:15 pm โดย internTk21 View Topic แจ้งปัญหาโพสบทความลงในเว็บบอร์ดส่วนตัวไม่ได้
สอบถาม Google Structure ที่เหมาะกับคอร์สเรียนควรใช้แบบไหนดีค่ะ
โดย eange08 ศ 19 เม.ย. 2024 9:56 am บอร์ด Programming - PHP
1
80
ศ 19 เม.ย. 2024 10:28 am โดย mindphp View Topic สอบถาม Google Structure ที่เหมาะกับคอร์สเรียนควรใช้แบบไหนดีค่ะ
คำสั่งรวมไฟล์ และ บีบอัดในคำสั่งเดียว tar, zip
โดย mindphp พ 17 เม.ย. 2024 7:42 pm บอร์ด Linux - Web Server
0
123
พ 17 เม.ย. 2024 7:42 pm โดย mindphp View Topic คำสั่งรวมไฟล์ และ บีบอัดในคำสั่งเดียว  tar, zip
เช็คขนาดพื้นที่ฐานข้อมูล แต่ละก้อน แต่ละฐานข้อมูลว่าใช้พื้นที่ไปเท่าไหร่ ด้วย Comamnd Line
โดย mindphp จ 15 เม.ย. 2024 11:10 pm บอร์ด PostgreSQL
1
299
จ 15 เม.ย. 2024 11:14 pm โดย mindphp View Topic เช็คขนาดพื้นที่ฐานข้อมูล แต่ละก้อน แต่ละฐานข้อมูลว่าใช้พื้นที่ไปเท่าไหร่ ด้วย Comamnd Line
การติดตั้ง WSL เพื่อใช้งาน Linux Terminal บน Windows
โดย tsukasaz ศ 12 เม.ย. 2024 2:25 pm บอร์ด Share Knowledge
0
317
ศ 12 เม.ย. 2024 2:25 pm โดย tsukasaz View Topic การติดตั้ง WSL เพื่อใช้งาน Linux Terminal บน Windows
Super Сasual Dating - Real Women
โดย heroxbay ศ 12 เม.ย. 2024 8:55 am บอร์ด Microsoft Office Knowledge & line & Etc
0
259
ศ 12 เม.ย. 2024 8:55 am โดย heroxbay View Topic Super Сasual Dating - Real Women