Skip to content

Commit

Permalink
[py] Fix converting list of tuples to str in send_keys (#9330)
Browse files Browse the repository at this point in the history
Co-authored-by: David Burns <[email protected]>
  • Loading branch information
GeyseR and AutomatedTester authored Apr 20, 2021
1 parent 68f3edc commit db6d118
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 11 deletions.
2 changes: 1 addition & 1 deletion py/selenium/webdriver/remote/webelement.py
Original file line number Diff line number Diff line change
Expand Up @@ -529,7 +529,7 @@ def send_keys(self, *value) -> None:
if self.parent._is_remote:
local_files = list(map(lambda keys_to_send:
self.parent.file_detector.is_local_file(str(keys_to_send)),
''.join(str(value)).split('\n')))
''.join(map(str, value)).split('\n')))
if None not in local_files:
remote_files = []
for file in local_files:
Expand Down
51 changes: 41 additions & 10 deletions py/test/selenium/webdriver/common/upload_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,35 +15,66 @@
# specific language governing permissions and limitations
# under the License.

import os
import pytest
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.webelement import WebElement


import os
@pytest.fixture
def get_local_path():
current_dir = os.path.dirname(os.path.realpath(__file__))

def wrapped(filename):
return os.path.join(current_dir, filename)

return wrapped

def test_can_upload_file(driver, pages):

def test_can_upload_file(driver, pages, get_local_path):

pages.load("upload.html")
current_dir = os.path.dirname(os.path.realpath(__file__))
driver.find_element(By.ID, 'upload').send_keys(os.path.join(current_dir, "test_file.txt"))

driver.find_element(By.ID, 'upload').send_keys(get_local_path("test_file.txt"))
driver.find_element(By.ID, 'go').click()
driver.switch_to.frame(driver.find_element(By.ID, "upload_target"))
body = driver.find_element(By.CSS_SELECTOR, "body").text

assert "test_file.txt" in body


def test_can_upload_two_files(driver, pages):
def test_can_upload_two_files(driver, pages, get_local_path):

pages.load("upload.html")
current_dir = os.path.dirname(os.path.realpath(__file__))
driver.find_element(By.ID, 'upload')\
.send_keys(
os.path.join(current_dir, "test_file.txt") + "\n" + os.path.join(current_dir, "test_file2.txt")
)
two_file_paths = get_local_path("test_file.txt") + "\n" + get_local_path("test_file2.txt")
driver.find_element(By.ID, 'upload').send_keys(two_file_paths)
driver.find_element(By.ID, 'go').click()
driver.switch_to.frame(driver.find_element(By.ID, "upload_target"))
body = driver.find_element(By.CSS_SELECTOR, "body").text

assert "test_file.txt" in body
assert "test_file2.txt" in body


@pytest.mark.xfail_firefox
@pytest.mark.xfail_chrome
@pytest.mark.xfail_safari
def test_file_is_uploaded_to_remote_machine_on_select(driver, pages, get_local_path):

uploaded_files = []
original_upload_func = WebElement._upload

def mocked_upload_func(self, filename):
uploaded_files.append(filename)
return original_upload_func(self, filename)

WebElement._upload = mocked_upload_func
try:
pages.load("upload.html")
two_file_paths = get_local_path("test_file.txt") + "\n" + get_local_path("test_file2.txt")
driver.find_element(By.ID, 'upload').send_keys(two_file_paths)
assert len(uploaded_files) == 2
assert uploaded_files[0] == get_local_path("test_file.txt")
assert uploaded_files[1] == get_local_path("test_file2.txt")
finally:
WebElement._upload = original_upload_func

0 comments on commit db6d118

Please sign in to comment.