Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending Keys Using Splinter

I want to test an autocomplete box using Splinter. I need to send the 'down' and 'enter' keys through to the browser but I'm having trouble doing this.

I am currently finding an input box and typing 'tes' into that box successfully

context.browser.find_by_xpath(\\some\xpath\).first.type('tes')

What I want to do next is to send some keys to the browser, specifically the 'down' key (to select the first autocomplete suggestion) then send the 'enter' key to select that autocomplete element.

I've tried extensive searches and can't figure out how to do this.

I even tried some javascript

script = 'var press = jQuery.Event("keypress"); press.keyCode = 34; press.keyCode = 13;'
context.browser.execute_script(script)

but that didn't do anything unfortunately

packages I'm using:

django 1.6 django-behave==0.1.2 splinter 0.6

current config is:
from splinter.browser import Browser from django.test.client import Client

context.browser = Browser('chrome')
context.client = Client()
like image 304
lukeaus Avatar asked Feb 10 '15 11:02

lukeaus


1 Answers

You can send keys by switching to the active element:

from selenium.webdriver.common.keys import Keys

context.browser.find_by_xpath('//input[@name="username"]').first.type('test')
active_web_element = context.browser.driver.switch_to_active_element()  
active_web_element.send_keys(Keys.PAGE_DOWN)
active_web_element.send_keys(Keys.ENTER)

The active element will be the last element you interacted with, so in this case the field you typed in.

switch_to_active_element() returns a selenium.webdriver.remote.webelement.WebElement, not a splinter.driver.webdriver.WebDriverElement, so unfortunately you cannot call send_keys on the return value of find_by_*(...) directly.

like image 140
Blaise Avatar answered Oct 24 '22 02:10

Blaise