Skip to content

Commit ff64efc

Browse files
committed
Merge pull request #48 from appium/isaac-replacekeys
Add set_text method for Android
2 parents 041bf3a + 75c8fb4 commit ff64efc

File tree

4 files changed

+44
-0
lines changed

4 files changed

+44
-0
lines changed

appium/webdriver/mobilecommand.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,4 @@ class MobileCommand(object):
4949
SHAKE = 'shake'
5050
RESET = 'reset'
5151
HIDE_KEYBOARD = 'hideKeyboard'
52+
REPLACE_KEYS = 'replaceKeys'

appium/webdriver/webdriver.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,8 @@ def _addCommands(self):
694694
('POST', '/session/$sessionId/ime/deactivate')
695695
self.command_executor._commands[Command.GET_ACTIVE_IME_ENGINE] = \
696696
('GET', '/session/$sessionId/ime/active_engine')
697+
self.command_executor._commands[Command.REPLACE_KEYS] = \
698+
('POST', '/session/$sessionId/appium/element/$elementId/replace_value')
697699

698700

699701
# monkeypatched method for WebElement

appium/webdriver/webelement.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15+
from .mobilecommand import MobileCommand as Command
16+
1517
from selenium.webdriver.common.by import By
1618
from selenium.webdriver.remote.webelement import WebElement as SeleniumWebElement
1719

@@ -84,3 +86,20 @@ def find_elements_by_accessibility_id(self, id):
8486
driver.find_elements_by_accessibility_id()
8587
"""
8688
return self.find_elements(by=By.ACCESSIBILITY_ID, value=id)
89+
90+
def set_text(self, keys=''):
91+
"""Sends text to the element. Previous text is removed.
92+
Android only.
93+
94+
:Args:
95+
- keys - the text to be sent to the element.
96+
97+
:Usage:
98+
element.set_text('some text')
99+
"""
100+
data = {
101+
'elementId': self._id,
102+
'value': [keys]
103+
}
104+
self._execute(Command.REPLACE_KEYS, data)
105+
return self

test/functional/android/appium_tests.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,28 @@ def test_open_notifications(self):
173173
sleep(1)
174174
self.driver.find_element_by_android_uiautomator('new UiSelector().text(":-|")')
175175

176+
def test_set_text(self):
177+
self.driver.find_element_by_android_uiautomator('new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text("Views").instance(0));').click()
178+
self.driver.find_element_by_name('Controls').click()
179+
self.driver.find_element_by_name('1. Light Theme').click()
180+
181+
el = self.driver.find_element_by_class_name('android.widget.EditText')
182+
el.send_keys('original text')
183+
el.set_text('new text')
184+
185+
self.assertEqual('new text', el.text)
186+
187+
def test_send_keys(self):
188+
self.driver.find_element_by_android_uiautomator('new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text("Views").instance(0));').click()
189+
self.driver.find_element_by_name('Controls').click()
190+
self.driver.find_element_by_name('1. Light Theme').click()
191+
192+
el = self.driver.find_element_by_class_name('android.widget.EditText')
193+
el.send_keys('original text')
194+
el.send_keys(' and new text')
195+
196+
self.assertEqual('original text and new text', el.text)
197+
176198

177199
if __name__ == "__main__":
178200
suite = unittest.TestLoader().loadTestsFromTestCase(AppiumTests)

0 commit comments

Comments
 (0)