Nhập khóa Enter / Return bằng Python và Selenium?


260

Tôi đang tìm kiếm một cách nhanh chóng để nhập và nhập hoặc trả về phím trong Selenium. Thật không may, biểu mẫu tôi đang cố kiểm tra (không phải mã của riêng tôi nên tôi không thể sửa đổi) không có nút Gửi. Khi làm việc với nó bằng tay, tôi chỉ cần gõ ENTERhoặc RETURN. Tôi cần biết làm thế nào để làm điều đó với typelệnh Selenium vì không có nút nào để nhấp.


2
Điều này có thể giúp asynyncy.blogspot.com/2008/11/ Khăn
Jonathan Parker

cảm ơn, đó chính xác là những gì tôi cần!
croixhaug

@croixhaug: Bạn đang sử dụng cái gì? Selenium RC hoặc WebDriver (Selenium 2)? Ngôn ngữ thì sao? Java? C #? hay cái gì?
Ripon Al Wasim

@RiponAlWasim, năm 2009 (khi câu hỏi được hỏi) không có WebDriver. Ngoài ra, câu trả lời cho cả hai đã có ở đây một thời gian ...
Alex Okrushko

@AlexOkrushko: vâng, bạn đúng
Ripon Al Wasim

Câu trả lời:


296
import org.openqa.selenium.Keys

WebElement.sendKeys(Keys.RETURN);

các importtuyên bố là cho Java, cho các ngôn ngữ khác, nó là có thể là một khác nhau, ví dụ python:from selenium.webdriver.common.keys import Keys


25
Tôi tin rằng nó đã di chuyển. from selenium.webdriver.common.keys import Keys( stackoverflow.com/questions/5503361/
James Broadhead

@HJames Broadhead: Tôi đã kiểm tra nó, lớp Keys cho JAVA thực tế (2.17.0) vẫn cònorg.openqa.selenium.Keys
Ralph

3
Tôi biết rằng trả lại khác với enter, nhưng Keys.ENTER khác nhau như thế nào? (Tôi sẽ nghĩ rằng Keys.RETURN đơn giản sẽ làm cho nó rõ ràng hơn rằng đó là một bot thực hiện hành động?)
NoBrainer

1
@NoBrainer: Xem nhanh tệp đã nhập sẽ trả lời câu hỏi của bạn : RETURN = '\ue006' ENTER = '\ue007'. Nhưng tại sao? Một số khác biệt di tích hoặc hệ điều hành.
omikron

2
@NoBrainer: Enter and Return là các khóa khác nhau, hãy xem hình ảnh của bài viết trên wikipedia này: en.wikipedia.org/wiki/ Entry_key
Ralph

193

JAVA

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

HOẶC LÀ,

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)

HOẶC LÀ,

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

HOẶC LÀ,

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

RUBY

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

HOẶC LÀ,

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

HOẶC LÀ,

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

C #

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

HOẶC LÀ,

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

1
Đối với Python, tôi thấy rằng việc thêm "\ n" vào chuỗi đầu vào là cách đơn giản nhất để thực hiện. Nó đã làm việc trong một lĩnh vực tìm kiếm.
YakovK

26

Bây giờ Selenium 2 đã được phát hành, việc gửi khóa Enter sẽ dễ dàng hơn một chút, vì bạn có thể làm điều đó với send_keysphương thức của selenium.webdriver.remote.webelement.WebElementlớp (mã ví dụ này là trong Python, nhưng cùng một phương thức tồn tại trong 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

Bạn có thể sử dụng một trong hai Keys.ENTERhoặc Keys.RETURN. Dưới đây là một số chi tiết:

Sử dụng :

  • Java :

    • Sử dụng Keys.ENTER:

      import org.openqa.selenium.Keys;
      driver.findElement(By.id("element_id")).sendKeys(Keys.ENTER);
      
    • Sử dụng Keys.RETURN

      import org.openqa.selenium.Keys;
      driver.findElement(By.id("element_id")).sendKeys(Keys.RETURN);
      
  • Con trăn

    • Sử dụng Keys.ENTER:

      from selenium.webdriver.common.keys import Keys
      driver.find_element_by_id("element_id").send_keys(Keys.ENTER)
      
    • Sử dụng Keys.RETURN

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

Keys.ENTERKeys.RETURNcả hai đều từ org.openqa.selenium.Keys, mở rộng java.lang.Enum<Keys>và thực hiệnjava.lang.CharSequence


Chìa khóa Enum

Enum Keys là đại diện của các phím có thể nhấn không phải là văn bản. Chúng được lưu trữ trong các điểm mã Unicode PUA ( Vùng sử dụng riêng ), 0xE000-0xF8FF.

Mã khóa:

Điều đặc biệt keys codesđối với họ như sau:

  • TRẢ LẠI =u'\ue006'
  • ENTER =u'\ue007'

Việc thực hiện tất cả Enum Keysđược xử lý theo cùng một cách.

Do đó, đây là Không Functional hoặc Operationalkhác biệt khi làm việc với sendKeys(Keys.ENTER);hoặc WebElement.sendKeys(Keys.RETURN);thông qua Selenium .


Nhập khóa và trả lại khóa

Trên bàn phím máy tính, Enter(hoặc Returntrên Mac OSX) trong hầu hết các trường hợp gây ra một dòng lệnh, dạng cửa sổ hoặc hộp thoại để vận hành chức năng mặc định của nó. Điều này thường là để hoàn thành một "mục" và bắt đầu quá trình mong muốn, và thường là một cách thay thế để nhấn nút OK.

Chúng Returnthường được gọi là Entervà chúng thường thực hiện các chức năng giống hệt nhau; tuy nhiên, trong một số ứng dụng cụ thể (chủ yếu là bố cục trang) Returnhoạt động cụ thể như phím Trả về vận chuyển mà nó bắt nguồn. Ngược lại, Enterthường được gắn nhãn với tên của nó trong văn bản đơn giản trên bàn phím PC chung.


Người giới thiệu


12

Khi viết bài kiểm tra HTML, phím ENTER có sẵn dưới dạng ${KEY_ENTER}.

Bạn có thể sử dụng nó với sendKeys, đây là một ví dụ:

sendKeys | id=search | ${KEY_ENTER}

11

Trong Python

Bước 1. from selenium.webdriver.common.keys import Keys

Bước 2. driver.find_element_by_name("").send_keys(Keys.ENTER)

Lưu ý: bạn phải viếtKeys.ENTER


9

Bạn chỉ cần làm điều này:

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

Vì tò mò, tại sao bạn thích viết 3 dòng mã mà bạn có thể viết thành một dòng duy nhất
Shekhar Swami


6

Đối với những người đang sử dụng WebDriverJS Keys.RETURNsẽ được tham chiếu là

webdriver.Key.RETURN

Một ví dụ đầy đủ hơn như một tài liệu tham khảo cũng có thể hữu ích:

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

driver.findElement(By.id("Value")).sendKeys(Keys.RETURN); hoặc là driver.findElement(By.id("Value")).sendKeys(Keys.ENTER);


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

ENTER = u '\ ue007'

tham khảo tài liệu selen 'Khóa đặc biệt'


Câu trả lời này hoạt động nhưng vô tình bỏ phiếu xuống vì tôi đã sử dụng sai số.
Martin Kersten

5

Tôi giống như để lưu ý rằng tôi cần thiết này để thử nghiệm dưa chuột của tôi và phát hiện ra rằng nếu bạn muốn mô phỏng cách nhấn vào nhập / phím Enter, bạn cần phải gửi các :returngiá trị và không các :entergiá trị (xem các giá trị được mô tả ở đây )


Điều này cũng đúng với trường văn bản đầu vào GWT.
joescii

5

Đối với Selenium RC với Java:

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

Đối với Selenium WebDriver (còn gọi là Selenium2) với java:

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

HOẶC LÀ,

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

Một cách khác để nhấn Enter trong WebDriver bằng cách sử dụng lớp Hành động:

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

3

nếu bạn đang tìm kiếm "cách nhấn phím enter từ bàn phím trong weben selenium (java)", thì đoạn mã dưới đây chắc chắn sẽ giúp bạn.

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

1
Bạn có thể vui lòng giải thích thêm câu trả lời của bạn thêm một chút mô tả về giải pháp bạn cung cấp không?
abarisone

3

Bạn có thể gọi submit()đối tượng phần tử mà bạn đã nhập văn bản của mình.

Ngoài ra, bạn có thể đặc biệt gửi khóa enter đến nó như được hiển thị trong đoạn mã trăn này:

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

Hãy thử sử dụng XPATH để tìm kiếm phần tử và sau đó, đoạn mã sau hoạt động:

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

Nếu phần tử có ID, tốt hơn là sử dụng ID thay vì xpath
Ripon Al Wasim

2

Có các cách nhấn phím sau - C #:

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

HOẶC LÀ

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

HOẶC LÀ

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


2

Khi bạn không muốn tìm kiếm bất kỳ trình định vị nào, Bạn có thể sử dụng lớp Robot: vd:

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

2

Để nhập khóa bằng selen Trước tiên, bạn cần nhập thư viện sau:

"import org.openqa.selenium.Keys"

sau đó thêm mã này vào nơi bạn muốn nhập khóa

"WebElement.sendKeys(Keys.RETURN);"

Bạn có thể thay thế TRẢ LẠI bằng bất kỳ khóa nào trong danh sách theo yêu cầu của bạn


1

Cũng có thể đạt được bằng giao diện Action, trong trường hợp WebDriver -

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



1

Tôi đã phải gửi khóa enter ở giữa một văn bản. Vì vậy, tôi đã thông qua văn bản sau đây để gửi chức năng phím để đạt được1\n2\n3

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

1

Đối với Selenium WebDriver bằng xpath (Nếu khóa hiển thị):

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

hoặc là,

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

1

Nếu bạn đang ở trong tình huống cụ thể này:

a) muốn CHỈ nhấn phím, nhưng không có webEuity cụ thể để nhấp vào

b) bạn đang sử dụng Selenium 2 (webDriver)

Sau đó, giải pháp là:

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

1

JAVA / JavaScript:

Bạn có thể cũng có thể làm theo cách này, không phải tự nhiên :

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);
}

1
Actions action = new Actions(driver);
action.sendKeys(Keys.RETURN);

0

Đối với tất cả mọi người sử dụng javascript / nút , điều này làm việc cho tôi:

driver.findElement(By.xpath('xpath')).sendKeys('ENTER');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.