Joting note that might be useful.
Selenium Interaction with Svelte Link and Button
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
def wait_until_element_found(xpath):
WebDriverWait(browser, timeout=10).until(
lambda x: browser.find_element_by_xpath(xpath)
)
# To handle scrolling just incase
last_coordinate = 300
while not browser.find_element_by_xpath(xpath).is_displayed():
print(last_coordinate)
browser.execute_script(
"window.scrollTo(0, {0})".format(last_coordinate))
last_coordinate += 300
sleep(1)
sleep(1)
# For debugging and tracking
element = browser.find_element_by_xpath(xpath)
print(element.location)
browser.find_element_by_xpath(xpath).click()
browser = webdriver.Firefox()
browser.maximize_window()
browser.get('https://tech.moe.ph/')
wait_until_element_found("//button[contains(@class,'cursor-pointer')]")
wait_until_element_found("//a[.='Tags']")
wait_until_element_found("//li[.='live-system']")
wait_until_element_found(
"//h1[starts-with(., 'Using Persistent Live System as Poor Man')]")
# xpath with contains
# wait_until_element_found(
# "//h1[contains(text(), 'Persistent Live System as Poor']")
# wait_until_element_found(
# "//*[contains(text(), 'Persistent Live System as Poor']")
# Reference
# https://stackoverflow.com/questions/12323403/how-do-i-find-an-element-that-contains-specific-text-in-selenium-webdriver-pyth
# driver.find_elements_by_xpath("//*[contains(text(), 'My Button')]")
wait_until_element_found("//a[.='debian']")
wait_until_element_found(
"//h1[starts-with(., 'Using Persistent Live System as Poor Man')]")
wait_until_element_found(
"//h1[starts-with(., 'Using Persistent Live System as Poor Man')]")
wait_until_element_found(
"//button[.='Back']")
browser.quit()
print("Done!")
Selenium with Form Interaction
from selenium import webdriver
# from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait, Select
from time import sleep
browser = webdriver.Firefox()
#browser = webdriver.Chrome()
browser.maximize_window()
# browser.get(
# 'file:///home/tonydeguia/Downloads/templated-industrious/elements.html')
browser.get(
'https://templated.co/items/demos/industrious/elements.html')
def wait_until_element_found(xpath):
# browser.execute_script("window.scrollTo(0, 0)")
WebDriverWait(browser, timeout=10).until(
lambda x: browser.find_element_by_xpath(xpath)
)
# To handle scrolling just incase
# last_coordinate = 300
# while not browser.find_element_by_xpath(xpath).is_displayed():
# print(last_coordinate)
# browser.execute_script(
# "window.scrollTo(0, {0})".format(last_coordinate))
# last_coordinate += 300
# sleep(1)
sleep(1)
# For debugging and tracking
element = browser.find_element_by_xpath(xpath)
print(element.location)
# browser.execute_script("window.scrollTo({0}, {1})"
# .format(element.location['x'] + 20, element.location['y'] + 20))
browser.find_element_by_xpath(xpath).click()
def wait_until_then_select(xpath, choice):
# browser.execute_script("window.scrollTo(0, 0)")
WebDriverWait(browser, timeout=10).until(
lambda x: browser.find_element_by_xpath(xpath)
)
sleep(1)
Select(browser.find_element_by_xpath(xpath)).select_by_value(choice)
def wait_until_then_fill(xpath, data):
WebDriverWait(browser, timeout=10).until(
lambda x: browser.find_element_by_xpath(xpath)
)
sleep(1)
element = browser.find_element_by_xpath(xpath)
print(element.location)
browser.find_element_by_xpath(xpath).send_keys(data)
def wait_until_then_submit(xpath):
WebDriverWait(browser, timeout=10).until(
lambda x: browser.find_element_by_xpath(xpath)
)
sleep(1)
element = browser.find_element_by_xpath(xpath)
print(element.location)
browser.find_element_by_xpath(xpath).submit()
# select by value
wait_until_then_select("//select[@id='category']", "epsilon")
# Checkbox button
# Use element instead of id for checkbox
wait_until_element_found("//label[.='Checkbox alpha']")
wait_until_element_found("//label[.='Checkbox beta']")
# Check if True
# driver.element().is_selected()
# Radio select
# Use element instead of id for radio select
wait_until_element_found("//label[.='Radio gamma']")
# Text field select
wait_until_then_fill("//input[@name='name']", "superusername")
wait_until_then_fill("//input[@name='email']", "superemailaddress")
# Submit
wait_until_then_submit("//input[@value='Submit Form']")
sleep(10)
browser.quit()
print("Done!")
Selenium Modal Interaction
browser.get('https://www.w3schools.com/bootstrap/bootstrap_modal.asp')
wait_until_element_found("//button[.='Click To Open Modal']")
browser.switch_to.active_element
wait_until_element_found("//p[.='Some text in the modal.']")
wait_until_element_found("//button[.='Close']")
Extended Selenium Class
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait, Select
from time import sleep
import sys
class WebNavigator(webdriver.Firefox, webdriver.Chrome):
sleep_int = 0.5
webdriver_timeout = 10
def __init__(self, browser):
if browser == "Firefox":
webdriver.Firefox.__init__(self)
elif browser == "Chrome":
webdriver.Chrome.__init__(self)
else:
sys.exit("Please specify webdriver (Firefox or Chrome).")
self.maximize_window()
def wait_then_click(self, xpath):
WebDriverWait(self, timeout=self.webdriver_timeout).until(
lambda x: self.find_element_by_xpath(xpath)
)
self.find_element_by_xpath(xpath).click()
sleep(self.sleep_int)
def wait_then_select(self, xpath, choice):
WebDriverWait(self, timeout=self.webdriver_timeout).until(
lambda x: self.find_element_by_xpath(xpath)
)
Select(self.find_element_by_xpath(xpath)).select_by_value(choice)
sleep(self.sleep_int)
def wait_then_fill(self, xpath, data):
WebDriverWait(self, timeout=self.webdriver_timeout).until(
lambda x: self.find_element_by_xpath(xpath)
)
self.find_element_by_xpath(xpath).send_keys(data)
sleep(self.sleep_int)
Assorted helper for Selenium
import argparse
parser = argparse.ArgumentParser(description="""
Parser
""")
parser.add_argument("username", help="Account login")
parser.add_argument("password", help="Account password")
parser.add_argument("-b", "--browser",
help="Webdriver to be used. Default: Chrome")
group = parser.add_mutually_exclusive_group()
group.add_argument(
"-a", "--all", help="Execute to all regions", action="store_true")
group.add_argument("-r", "--region", help="Execute to this specific region")
args = parser.parse_args()
print(args.username)
print(args.password)
print(args.browser)
Selenium CSS Selector
[HTML TAG].[CLASS] [HTML TAG] [HTML TAG][ATTRIBUTE]
wait_until_css("div.row form label[for='checkbox-alpha']")
wait_until_css("div.row form label[for='checkbox-beta']")
wait_until_css_select("div.row form #category", "epsilon")
Photo by Arseny Togulev on Unsplash