Stepik's autotest course hw by Rain
ChromeDriver is a powerful tool, and it can cause harms in the wrong hands. While using ChromeDriver, please follow these suggestions to help keeping it safe:
By default, ChromeDriver only allows local connections. If you need to connect to it from a remote host, use --allowed-ips switch on the command line to specify a list of IP addresses that are allowed to connect to ChromeDriver.
If possible, run ChromeDriver with a test account that has no access to sensitive local or network data. ChromeDriver should never be run with a privileged account.
If possible, run ChromeDriver in a protected environment such as Docker or virtual machine.
Use firewall to prevent unauthorized remote connection to ChromeDriver.
If you are using ChromeDriver through third-party tools such as Selenium Server, be sure to protect the network ports of those tools as well.
Use the latest versions of ChromeDriver and Chrome.
from selenium import webdriver
from selenium.webdriver.common.by import By
link = "http://suninjuly.github.io/simple_form_find_task.html"
try:
browser = webdriver.Chrome()
browser.get(link)
button = browser.find_element(By.ID, "submit")
button.click()
except Exception as error:
print(f'--Error {error}')
finally:
# Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ Π±ΡΠ°ΡΠ·Π΅Ρ ΠΏΠΎΡΠ»Π΅ Π²ΡΠ΅Ρ
ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΉ
browser.quit()
# Π½Π΅ Π·Π°Π±ΡΠ²Π°Π΅ΠΌ ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Π°, Ρ.ΠΊ. ΡΠΈΡΡΠ΅ΠΌΡ UNIX/Linux ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Π°,
# Π΅ΡΠ»ΠΈ Π² Π²Π°ΡΠ΅ΠΌ ΡΠΊΡΠΈΠΏΡΠ΅ Π΅Π΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ, ΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΡΠΎΡΠΊΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΠΊΠΎΠ΄, ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡΡ.
from selenium import webdriver
from selenium.webdriver.common.by import By
link = "http://suninjuly.github.io/simple_form_find_task.html"
with webdriver.Chrome() as browser:
browser.get(link)
button = browser.find_element(By.ID, "submit")
button.click()
# Π½Π΅ Π·Π°Π±ΡΠ²Π°Π΅ΠΌ ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Π°, Ρ.ΠΊ. ΡΠΈΡΡΠ΅ΠΌΡ UNIX/Linux ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Π°,
# Π΅ΡΠ»ΠΈ Π² Π²Π°ΡΠ΅ΠΌ ΡΠΊΡΠΈΠΏΡΠ΅ Π΅Π΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ, ΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΡΠΎΡΠΊΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΠΊΠΎΠ΄, ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡΡ.
# ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ²Π°ΡΠΎΠ² ΡΠ°Π²Π½ΠΎ 2
assert len(goods) == 2, 'smth wrong'
message = browser.find_element_by_id("verify_message")
assert "successful" in message.text
assert "login" in browser.current_url, # ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅
catalog_text = self.catalog_link.text # ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ,ΡΡΠΎΠ±Ρ Π½Π΅ Π±ΡΠ°ΡΡ Π΄Π²Π° ΡΠ°Π·Π°
assert catalog_text == "ΠΠ°ΡΠ°Π»ΠΎΠ³", \
f"Wrong language, got {catalog_text} instead of 'ΠΠ°ΡΠ°Π»ΠΎΠ³'"
# http://suninjuly.github.io/math.html
# <input class="check-input" type="radio" name="ruler" id="peopleRule" value="people" checked>
people_radio = browser.find_element_by_id("peopleRule")
people_checked = people_radio.get_attribute("checked")
print("value of people radio: ", people_checked)
assert people_checked is not None, "People radio is not selected by default"
# Π’.ΠΊ. Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ ΡΠ²Π½ΠΎ, ΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ get_attribute Π²Π΅ΡΠ½ΡΡ "true". ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ Π·Π°ΠΌΠ΅ΡΠΈΠ»ΠΈ,
# ΡΡΠΎ "true" Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠΉ Π±ΡΠΊΠ²Ρ, β Π²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ WebDriver Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ JavaScript,
# Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ»Π΅Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΈΡΡΡΡΡ Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠΉ Π±ΡΠΊΠ²Ρ, Π° Π½Π΅ Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ, ΠΊΠ°ΠΊ Π² Python.
# ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π΄ΡΡΠ³ΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, ΡΡΠ°Π²Π½ΠΈΠ² ΡΡΡΠΎΠΊΠΈ:
assert people_checked == "true", "People radio is not selected by default"
robots_radio = browser.find_element_by_id("robotsRule")
robots_checked = robots_radio.get_attribute("checked")
assert robots_checked is None
# Π’Π°ΠΊ ΠΆΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° disabled, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ
# Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ.
from selenium.webdriver.support.ui import Select
select = Select(browser.find_element_by_tag_name("select"))
select.select_by_value("1") # ΠΈΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ "Python"
# ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅ΡΠ΅ Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π°: select.select_by_visible_text("text") ΠΈ select.select_by_index(index).
from selenium import webdriver
browser = webdriver.Chrome()
browser.execute_script("document.title='Script executing';alert('Robots at work');")
import os
current_dir = os.path.abspath(os.path.dirname(__file__)) # ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΡΡΡ ΠΊ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
file_path = os.path.join(current_dir, 'file.txt') # Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΊ ΡΡΠΎΠΌΡ ΠΏΡΡΠΈ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°
element.send_keys(file_path)
# ΠΏΡΠΈΠ½ΡΡΡ Π°Π»Π΅ΡΡ
alert = browser.switch_to.alert
alert.accept()
# Π²Π·ΡΡΡ ΡΠ΅ΠΊΡΡ Π°Π»Π΅ΡΡΠ°
alert = browser.switch_to.alert
alert_text = alert.text
# ΠΊΠΎΠ½ΡΠΈΡΠΌ - ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ Π²ΡΠ±ΠΎΡΠΎΠΌ ΠΎΡΠΌΠ΅Π½Ρ
confirm = browser.switch_to.alert
confirm.accept()
confirm.dismiss()
# ΠΏΡΠΎΠΌΡ - ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠ»Π΅ΠΌ ΠΎΡΠ²Π΅ΡΠ°
prompt = browser.switch_to.alert
prompt.send_keys("My answer")
prompt.accept()
browser.switch_to.window(window_name)
new_window = browser.window_handles[1]
# Π½Π΅ΡΠ²Π½ΠΎΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ (Implicit wait) - Π³ΠΎΠ²ΠΎΡΠΈΠΌ WebDriver ΠΈΡΠΊΠ°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ 5 ΡΠ΅ΠΊΡΠ½Π΄
# Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½ΡΠΆΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ°Π·Ρ, Π² Ρ
ΡΠ΄ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π° 5 ΡΠ΅ΠΊΡΠ½Π΄.
browser = webdriver.Chrome()
browser.implicitly_wait(5)
ΠΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ°, ΡΠΎ WebDriver Π²ΡΠ±ΡΠΎΡΠΈΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ (exceptions):
- ΠΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π΅ Π±ΡΠ» Π½Π°ΠΉΠ΄Π΅Π½ Π·Π° ΠΎΡΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΡΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ NoSuchElementException.
- ΠΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π±ΡΠ» Π½Π°ΠΉΠ΄Π΅Π½ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΠΈΡΠΊΠ°, Π½ΠΎ ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ DOM ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠΌ StaleElementReferenceException. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ Π½Π°ΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΠ½ΠΎΠΏΠΊΠ° ΠΈ ΡΠ΅ΡΠ΅Π· ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Ρ Π½ΠΈΠΌ ΡΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ Π½Π°ΠΌ ΠΌΠ΅ΡΠΎΠ΄ click. ΠΡΠ»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π° ΡΡΠΎ Π²ΡΠ΅ΠΌΡ Π±ΡΠ»Π° ΡΠΊΡΡΡΠ° ΡΠΊΡΠΈΠΏΡΠΎΠΌ, ΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠΆΠ΅ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΠΎ β ΡΠ»Π΅ΠΌΠ΅Π½Ρ "ΡΡΡΠ°ΡΠ΅Π»" (stale) ΠΈ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
- ΠΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π±ΡΠ» Π½Π°ΠΉΠ΄Π΅Π½ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΠΈΡΠΊΠ°, Π½ΠΎ ΡΠ°ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΠ΅Π΅Ρ Π½ΡΠ»Π΅Π²ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡ), ΠΈ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ ΡΠΌΠΎΠ³ Π±Ρ Ρ Π½ΠΈΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠΌ ElementNotVisibleException.
# ΡΠ²Π½ΠΎΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ (Explicit Waits)
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("http://suninjuly.github.io/wait2.html")
# Π³ΠΎΠ²ΠΎΡΠΈΠΌ Selenium ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ 5 ΡΠ΅ΠΊΡΠ½Π΄, ΠΏΠΎΠΊΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π΅ ΡΡΠ°Π½Π΅Ρ ΠΊΠ»ΠΈΠΊΠ°Π±Π΅Π»ΡΠ½ΠΎΠΉ
button = WebDriverWait(browser, 5).until(
EC.element_to_be_clickable((By.ID, "verify"))
)
button.click()
message = browser.find_element_by_id("verify_message")
assert "successful" in message.text
'''
Π ΠΌΠΎΠ΄ΡΠ»Π΅ expected_conditions Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈΡ
ΠΏΡΠ°Π²ΠΈΠ», ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ
((By.ID, 'ΡΠ΅Π»Π΅ΠΊΡΠΎΡ'),'Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅'))
title_is
title_contains
presence_of_element_located
visibility_of_element_located
visibility_of
presence_of_all_elements_located
text_to_be_present_in_element
text_to_be_present_in_element_value
frame_to_be_available_and_switch_to_it
invisibility_of_element_located
element_to_be_clickable
staleness_of
element_to_be_selected
element_located_to_be_selected
element_selection_state_to_be
element_located_selection_state_to_be
alert_is_present
'''
# ΠΡΠ»ΠΈ ΠΌΡ Π·Π°Ρ
ΠΎΡΠΈΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, ΡΡΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅Π°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π΄Π°Π½Π½ΡΡ
, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΠΎΠ΅
# ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° until_not: Π³ΠΎΠ²ΠΎΡΠΈΠΌ Selenium ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ 5 ΡΠ΅ΠΊΡΠ½Π΄ ΠΏΠΎΠΊΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° ΡΡΠ°Π½Π΅Ρ Π½Π΅Π°ΠΊΡΠΈΠ²Π½ΠΎΠΉ
button = WebDriverWait(browser, 5).until_not(
EC.element_to_be_clickable((By.ID, "verify"))
)
# none (Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ)
# eager (ΡΡΡΠ°Π½ΠΈΡΠ° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΉ)
# normal (ΠΏΠΎΠ»Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΡΡΡΠ°Π½ΠΈΡΡ)
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
link = "example.com"
caps = DesiredCapabilities.CHROME
browser = webdriver.Chrome(desired_capabilities=caps)
caps['pageLoadStrategy'] = 'none' # Do not wait for full page load
$ pip freeze > requirements.txt
$ mkdir environments
$ cd environments
$ python3 -m venv selenium_env
$ source selenium_env/bin/activate
$ pip install -r requirements.txt
ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ readme
... ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ PATH?
ΠΎΡΡΡΠ°Π΅ΠΌΡΡ ΠΎΡ ΡΠΎΠΊΡΠΈΡΠ½ΡΡ
code-review
youtube: if __name __ == 'main': ΡΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ
ΡΡΠ΅Π½Π°ΠΆΠ΅Ρ ΠΏΠΎ css-ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ°ΠΌ
css-ΡΠ΅Π»Π΅ΠΊΡΠΎΡΡ
css sselector reference
ΡΡΠ°ΡΡΡ Π½Π° Ρ
Π°Π±ΡΠ΅: Π‘Π΅Π»Π΅ΠΊΡΠΎΡΡ CSS ΠΈ ΠΈΡ
ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ
... ΠΊΠ°ΠΊ ΡΡΡΠΎΠΈΡΡ Ρ
ΠΎΡΠΎΡΠΈΠ΅ Π»ΠΎΠΊΠ°ΡΠΎΡΡ?
Π°ΡΡΠΈΠ±ΡΡΡ html
ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΠ΅ Π·Π° expected_conditions Π΄Π»Ρ explicit wait
... ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡΡ
... ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ "ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠ΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡΡ"?
How to Get Selenium to Wait for Page Load After a Click
ΡΡΠ΅Π½Π°ΠΆΠ΅Ρ ΠΏΠΎ git
ΠΊΠ½ΠΈΠ³Π° ΠΏΠΎ git
Π΅ΡΠ΅ ΠΎΠ΄Π½Π° ΠΊΠ½ΠΈΠ³Π° ΠΏΠΎ git
git Π΄Π»Ρ Π΄Π°ΡΠ½ΠΎΠ² Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΠΊΠΎΠ²
Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΡΠ΅Π½Π°ΠΆΠ΅Ρ ΠΏΠΎ git
Deep dive into Selenium Waits | Selenium camp
Serverless β Automated Tests of web apps in the Cloud world