Skip to content

Instantly share code, notes, and snippets.

@florentbr
florentbr / #focus-next.py
Last active September 29, 2016 13:51
Selenium - Focus the next/previous element when the Tab key is not supported
JS_TAB_FOCUS = open('tab-focus.js', 'r').read()
# focus the next element
elem_next = driver.execute_scrit(JS_TAB_FOCUS, false)
elem_next.send_keys("abcd")
# focus the previous element
elem_prev = driver.execute_scrit(JS_TAB_FOCUS, true)
elem_prev.click()
@florentbr
florentbr / #drag-drop.py
Last active March 9, 2023 14:48
Selenium - HTML5 drag and drop
from selenium import webdriver
import time
# JavaScript: HTML5 Drag and drop script
# param1 (WebElement): Source element to drag
# param2 (WebElement): Optional - target element for the drop
# param3 (int): Optional - Drop offset x relative to the target if any or source element
# param4 (int): Optional - Drop offset y relative to the target if any or source element
# param4 (int): Optional - Delay in milliseconds (default = 1ms) for dragging and dropping
# param5 (string): Optional - Key pressed (alt or ctrl or shilf)
@florentbr
florentbr / #wd-drop-file.py
Last active April 7, 2024 02:56
Selenium - Drop a file from the desktop on a drop area
from selenium import webdriver
from selenium.webdriver.remote.webelement import WebElement
import os.path
# JavaScript: HTML5 File drop
# source : https://gist.github.com/florentbr/0eff8b785e85e93ecc3ce500169bd676
# param1 WebElement : Drop area element
# param2 Double : Optional - Drop offset x relative to the top/left corner of the drop area. Center if 0.
# param3 Double : Optional - Drop offset y relative to the top/left corner of the drop area. Center if 0.
# return WebElement : File input
@florentbr
florentbr / mozilla-central-fb40bcb6155b-fix#729.patch
Last active June 7, 2017 17:11
Patch for marionette issue #729
--- testing/marionette/driver.js 2017-06-07 12:34:43.000000000 +0100
+++ testing/marionette/driver.js 2017-06-07 16:08:25.014583900 +0100
@@ -887,7 +887,8 @@
}
opts.timeout = timeout;
- let wargs = evaluate.fromJSON(args, this.curBrowser.seenEls, sb.window);
+ let container = {frame: sb.window, shadowRoot: undefined};
+ let wargs = evaluate.fromJSON(args, this.curBrowser.seenEls, container);
let evaluatePromise = evaluate.sandbox(sb, script, wargs, opts);
@florentbr
florentbr / #selenium-chrome-authentication-extension
Last active December 5, 2023 08:49
Chrome extension to automatically set the credentials.
To build the extension, update the username/password and zip `background.js` and `manifest.json` in a single archive.
@florentbr
florentbr / #wd-upload-file.py
Last active January 4, 2022 04:27
Selenium - Upload a file
from selenium import webdriver
from selenium.webdriver.remote.webelement import WebElement
from selenium.common.exceptions import NoSuchElementException
import os.path
def upload_files(element, *files):
driver = element.parent
isLocal = not driver._is_remote or '127.0.0.1' in driver.command_executor._url
paths = []
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import os, time, base64
def get_downloaded_files(driver):
if not driver.current_url.startswith("chrome://downloads"):
driver.get("chrome://downloads/")
Attribute VB_Name = "JsonIO"
'
' Version: 2019/09/10
'
' Module to read and write the JSON format (https://www.json.org)
' By default `{ }` is parsed as a `Dictionary` and `[ ]` as a base 1 Array.
'
' Usage:
'
' ' Parse a JSON string '
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
END
Attribute VB_Name = "Dictionary"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Attribute VB_Description = "Collection of keys and items which maps keys to items with a minimum cost O(1)."
# disable the file picker
driver.execute_script("""
HTMLInputElement.prototype.click = function () {
if (this.type !== 'file') {
HTMLElement.prototype.click.call(this);
}
else if (!this.parentNode) {
this.style.display = 'none';
this.ownerDocument.documentElement.appendChild(this);