พิมพ์คีย์ Enter / Return โดยใช้ Python และ Selenium หรือไม่


260

ฉันกำลังมองหาวิธีที่รวดเร็วในการพิมพ์และป้อนหรือส่งคืนคีย์ในซีลีเนียม น่าเสียดายที่แบบฟอร์มที่ฉันพยายามทดสอบ (ไม่ใช่รหัสของฉันเองดังนั้นฉันจึงไม่สามารถแก้ไขได้) ไม่มีปุ่มส่ง เมื่อทำงานร่วมกับมันด้วยตนเองผมเพียงแค่พิมพ์หรือENTER RETURNฉันจำเป็นต้องรู้วิธีการทำเช่นนั้นด้วยtypeคำสั่งSelenium เนื่องจากไม่มีปุ่มให้คลิก


2
สิ่งนี้อาจช่วยasynchrony.blogspot.com/2008/11/…
Jonathan Parker

ขอบคุณนั่นคือสิ่งที่ฉันต้องการ!
croixhaug

@croixhaug: คุณกำลังใช้อะไร ซีลีเนียม RC หรือ WebDriver (ซีลีเนียม 2)? แล้วภาษาล่ะ Java? ค#? หรืออะไร?
Ripon Al Wasim

@RiponAlWasim ในปี 2009 (เมื่อมีการถามคำถาม) ไม่มี WebDriver อีกทั้งคำตอบของทั้งคู่ก็อยู่ที่นี่
ซักพัก

@AlexOkrushko: ใช่คุณพูดถูก
Ripon Al Wasim

คำตอบ:


296
import org.openqa.selenium.Keys

WebElement.sendKeys(Keys.RETURN);

importคำสั่งสำหรับ Java สำหรับภาษาอื่น ๆ มันอาจจะแตกต่างกันเช่นงูหลาม:from selenium.webdriver.common.keys import Keys


25
ฉันเชื่อว่ามันเคลื่อนไหว from selenium.webdriver.common.keys import Keys( stackoverflow.com/questions/5503489/… )
James Broadhead

@HJames Broadhead: ฉันได้ตรวจสอบแล้วคลาส Keys สำหรับ JAVA ที่แท้จริง (2.17.0) ยังคงอยู่org.openqa.selenium.Keys
Ralph

3
ฉันรู้ว่าการคืนสินค้านั้นแตกต่างจากการป้อน แต่ Keys.ENTER ต่างกันอย่างไร (ฉันคิดว่า Keys.RETURN จะทำให้ชัดเจนมากขึ้นว่าเป็นบอทที่ดำเนินการหรือไม่)
NoBrainer

1
@NoBrainer: RETURN = '\ue006' ENTER = '\ue007'ดูอย่างรวดเร็วที่ไฟล์ที่นำเข้าจะตอบคำถามของคุณ: แต่ทำไม ความแตกต่างของที่ระลึกหรือระบบปฏิบัติการบางอย่าง
omikron

2
@NoBrainer: Enter และ Return เป็นกุญแจที่แตกต่างกันดูที่ภาพของบทความวิกิพีเดียนี้: en.wikipedia.org/wiki/Enter_key
Ralph

193

JAVA

driver.findElement(By.id("Value")).sendKeys(Keys.RETURN);

หรือ,

driver.findElement(By.id("Value")).sendKeys(Keys.ENTER);

PYTHON

from selenium.webdriver.common.keys import Keys
driver.find_element_by_name("Value").send_keys(Keys.RETURN)

หรือ,

driver.find_element_by_name("Value").send_keys(Keys.ENTER)

หรือ,

element = driver.find_element_by_id("Value")
element.send_keys("keysToSend")
element.submit()

ทับทิม

element = @driver.find_element(:name, "value")
element.send_keys "keysToSend"
element.submit

หรือ,

element = @driver.find_element(:name, "value")
element.send_keys "keysToSend"
element.send_keys:return

หรือ,

@driver.action.send_keys(:enter).perform
@driver.action.send_keys(:return).perform

ค#

driver.FindElement(By.Id("Value")).SendKeys(Keys.Return);

หรือ,

driver.FindElement(By.Id("Value")).SendKeys(Keys.Enter);

1
สำหรับ Python ฉันพบว่าการผนวก "\ n" กับสตริงอินพุตเป็นวิธีที่ตรงไปตรงมาที่สุด มันทำงานในช่องค้นหา
YakovK

26

ตอนนี้ซีลีเนียม 2 เปิดตัวแล้วมันง่ายกว่านิดหน่อยในการส่งคีย์ Enter เนื่องจากคุณสามารถทำได้ด้วยsend_keysเมธอดของselenium.webdriver.remote.webelement.WebElementคลาส (โค้ดตัวอย่างนี้คือ Python แต่มีเมธอดเดียวกันใน Java):

>>> from selenium import webdriver
>>> wd = webdriver.Firefox()
>>> wd.get("http://localhost/example/page")
>>> textbox = wd.find_element_by_css_selector("input")
>>> textbox.send_keys("Hello World\n")

24

คุณสามารถใช้อย่างใดอย่างหนึ่ง หรือKeys.ENTER Keys.RETURNนี่คือรายละเอียดบางส่วน:

การใช้งาน:

  • ชวา :

    • การใช้Keys.ENTER:

      import org.openqa.selenium.Keys;
      driver.findElement(By.id("element_id")).sendKeys(Keys.ENTER);
      
    • การใช้ Keys.RETURN

      import org.openqa.selenium.Keys;
      driver.findElement(By.id("element_id")).sendKeys(Keys.RETURN);
      
  • งูหลาม:

    • การใช้Keys.ENTER:

      from selenium.webdriver.common.keys import Keys
      driver.find_element_by_id("element_id").send_keys(Keys.ENTER)
      
    • การใช้ Keys.RETURN

      from selenium.webdriver.common.keys import Keys
      driver.find_element_by_id("element_id").send_keys(Keys.RETURN)
      

Keys.ENTERและKeys.RETURNทั้งสองมาจากorg.openqa.selenium.Keysซึ่งขยายjava.lang.Enum<Keys>และดำเนินการjava.lang.CharSequence


คีย์ Enum

Enum Keysเป็นการนำเสนอของปุ่มกดที่ไม่ใช่ข้อความ สิ่งเหล่านี้ถูกเก็บไว้ในจุดโค้ดUnicode PUA ( พื้นที่ใช้งานส่วนตัว ), 0xE000-0xF8FF

รหัสคีย์:

พิเศษkeys codesสำหรับพวกเขามีดังนี้:

  • ผลตอบแทน =u'\ue006'
  • ป้อน =u'\ue007'

การดำเนินการทั้งหมดEnum Keysได้รับการจัดการในลักษณะเดียวกัน

ดังนั้นเหล่านี้คือไม่มี FunctionalหรือOperationalความแตกต่างในขณะที่ทำงานกับทั้งsendKeys(Keys.ENTER);หรือWebElement.sendKeys(Keys.RETURN);ผ่านซีลีเนียม


ป้อนรหัสและรหัสส่งคืน

บนแป้นพิมพ์คอมพิวเตอร์ส่วนใหญ่Enter(หรือReturnบน Mac OSX) ในกรณีส่วนใหญ่ทำให้เกิดบรรทัดคำสั่งรูปแบบหน้าต่างหรือกล่องโต้ตอบเพื่อใช้งานฟังก์ชั่นเริ่มต้น โดยทั่วไปจะเสร็จสิ้น "รายการ" และเริ่มต้นกระบวนการที่ต้องการและมักจะเป็นทางเลือกในการกดปุ่ม OK

Returnมักจะเรียกว่าเป็นEnterและพวกเขามักจะทำหน้าที่เหมือนกัน อย่างไรก็ตามในบางแอปพลิเคชั่นเฉพาะ (ส่วนใหญ่หน้าเลย์เอาต์) Returnทำงานโดยเฉพาะเช่นคีย์Carriage Returnซึ่งเป็นที่มา ในทางตรงกันข้ามEnterฉลากมักจะมีชื่อเป็นข้อความธรรมดาบนแป้นพิมพ์พีซีทั่วไป


อ้างอิง


12

เมื่อมีการเขียนการทดสอบ HTML, แป้น ENTER ${KEY_ENTER}สามารถใช้ได้เป็น

คุณสามารถใช้กับsendKeysนี่คือตัวอย่าง:

sendKeys | id=search | ${KEY_ENTER}

11

ในงูหลาม

ขั้นตอนที่ 1. from selenium.webdriver.common.keys import Keys

ขั้นตอนที่ 2. driver.find_element_by_name("").send_keys(Keys.ENTER)

หมายเหตุ:คุณต้องเขียนKeys.ENTER


9

คุณทำสิ่งนี้:

final private WebElement input = driver.findElement(By.id("myId"));
input.clear();
input.sendKeys(value); // the value we want to set to input
input.sendKeys(Keys.RETURN);

เพิ่งออกมาจากความอยากรู้ทำไมคุณถึงชอบเขียนโค้ด 3 บรรทัดซึ่งคุณสามารถเขียนในบรรทัดเดียว
Shekhar Swami


6

สำหรับผู้ที่ใช้ WebDriverJS Keys.RETURNจะถูกอ้างอิงเป็น

webdriver.Key.RETURN

ตัวอย่างที่สมบูรณ์มากขึ้นเช่นการอ้างอิงอาจมีประโยชน์เช่นกัน:

var pressEnterToSend = function () {
    var deferred = webdriver.promise.defer();
    webdriver.findElement(webdriver.By.id('id-of-input-element')).then(function (element) {
        element.sendKeys(webdriver.Key.RETURN);
        deferred.resolve();
    });

    return deferred.promise;
};


6
search = browser.find_element_by_xpath("//*[@type='text']")
search.send_keys(u'\ue007')

ENTER = u '\ ue007'

อ้างอิงเอกสารซีลีเนียม 'กุญแจพิเศษ'


คำตอบนี้ใช้ได้ แต่ตั้งใจลงคะแนนเพราะฉันใช้หมายเลขผิด
Martin Kersten

5

ผมเพียงแค่ต้องการทราบว่าผมจำเป็นต้องนี้สำหรับการทดสอบแตงกวาของฉันและพบว่าหากคุณต้องการที่จะจำลองการกดปุ่ม Enter / ผลตอบแทนที่คุณจะต้องส่ง:returnค่าและไม่:enterค่า (เห็นค่าที่อธิบายไว้ที่นี่ )


สิ่งนี้ก็เป็นจริงเช่นกันสำหรับฟิลด์ข้อความอินพุต GWT
joescii

5

สำหรับ Selenium RC พร้อม Java:

selenium.keyPress("elementID", "\13");

สำหรับ Selenium WebDriver (aka Selenium2) ด้วย java:

driver.findElement(By.id("elementID")).sendKeys(Keys.ENTER);

หรือ,

driver.findElement(By.id("elementID")).sendKeys(Keys.RETURN);

อีกวิธีในการกด Enter ใน WebDriver โดยใช้คลาส Actions:

Actions action = new Actions(driver); 
action.sendKeys(driver.findElement(By.id("elementID")), Keys.ENTER).build().perform();

3

หากคุณกำลังมองหา "วิธีกดปุ่ม Enter จากแป้นพิมพ์ในซีลีเนียม webdriver (java)" รหัสด้านล่างจะช่วยคุณได้อย่างแน่นอน

//assign key board object
Keyboard keyboard=((HasInputDevices) driver).getKeyboard();
//enter a key
keyboard.pressKey(Keys.ENTER);

1
คุณช่วยอธิบายรายละเอียดเพิ่มเติมเกี่ยวกับโซลูชันที่คุณให้ได้ไหม
abarisone

3

คุณสามารถโทรหาsubmit()วัตถุองค์ประกอบที่คุณป้อนข้อความของคุณ

หรือมิฉะนั้นคุณสามารถส่งคีย์ Enter ไปยังคีย์ดังที่แสดงในตัวอย่างโค้ดไพ ธ อนนี้:

from selenium.webdriver.common.keys import Keys
element.send_keys(Keys.ENTER) # element is the WebElement object corresponding to the input field on the page

2

ลองใช้ XPATH เพื่อค้นหาองค์ประกอบจากนั้นโค้ดต่อไปนี้ใช้งานได้:

driver.findElement(By.xpath(".//*[@id='txtFilterContentUnit']")).sendKeys(Keys.ENTER);

ถ้าองค์ประกอบมี ID มันจะดีกว่าที่จะใช้ ID แทน xpath
Ripon Al Wasim

2

มีวิธีการกดปุ่มต่อไปนี้ - C #:

Driver.FindElement(By.Id("Value")).SendKeys(Keys.Return);

หรือ

OpenQA.Selenium.Interactions.Actions action = new OpenQA.Selenium.Interactions.Actions(Driver);
action.SendKeys(OpenQA.Selenium.Keys.Escape);

หรือ

IWebElement body = GlobalDriver.FindElement(By.TagName("body"));
body.SendKeys(Keys.Escape);


2

เมื่อคุณไม่ต้องการค้นหาที่ตั้งใด ๆ คุณสามารถใช้คลาสหุ่นยนต์: เช่น:

            Robot robot = new Robot();
            robot.keyPress(KeyEvent.VK_ENTER);
            robot.keyRelease(KeyEvent.VK_ENTER);

2

ในการป้อนคีย์โดยใช้ซีลีเนียมก่อนอื่นคุณต้องนำเข้าไลบรารีต่อไปนี้:

"import org.openqa.selenium.Keys"

จากนั้นเพิ่มรหัสนี้ซึ่งคุณต้องการป้อนรหัส

"WebElement.sendKeys(Keys.RETURN);"

คุณสามารถแทนที่ RETURN ด้วยปุ่มใดก็ได้จากรายการตามความต้องการของคุณ


1

สามารถทำได้โดยใช้ส่วนต่อประสาน Action ในกรณีของ WebDriver -

WebElement username = driver.findElement(By.name("q"));
username.sendKeys(searchKey);
Actions action = new Actions(driver);
action.sendKeys(Keys.RETURN);
action.perform();



1

ฉันต้องส่งรหัสกลางข้อความ ดังนั้นฉันผ่านข้อความต่อไปนี้เพื่อส่งฟังก์ชั่นคีย์เพื่อให้บรรลุ1\n2\n3

1\N{U+E007}2\N{U+E007}3

1

สำหรับ Selenium WebDriver โดยใช้ xpath (หากมองเห็นคีย์):

driver.findElement(By.xpath("xpath of text field")).sendKeys(Keys.ENTER);

หรือ,

driver.findElement(By.xpath("xpath of text field")).sendKeys(Keys.RETURN);

1

หากคุณอยู่ในสถานการณ์ที่เฉพาะเจาะจงนี้:

a) ต้องการเพียงแค่กดปุ่ม แต่ไม่มี webElement ที่เฉพาะเจาะจงให้คลิก

b) คุณกำลังใช้ Selenium 2 (webDriver)

จากนั้นวิธีแก้คือ:

    Actions builder = new Actions(webDriverInstance);
    builder.sendKeys(Keys.RETURN).perform();

1

Java / JavaScript:

คุณอาจทำได้ด้วยวิธีนี้เช่นกันไม่ใช่ :

public void triggerButtonOnEnterKeyInTextField(String textFieldId, String clickableButId)
{
  ((JavascriptExecutor) driver).executeScript("
  elementId = arguments[0];
  buttonId = arguments[1];
  document.getElementById(elementId)
    .addEventListener("keyup", function(event) {
      event.preventDefault();
      if (event.keyCode == 13) {
          document.getElementById(buttonId).click();
      }
    });", textFieldId, clickableButId);
}


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.