1.打开网页

driver.get("https://selenium.dev")

2.获取当前网页网址

driver.current_url

3.点击浏览器返回按键

driver.back()

4.点击浏览器前进按键

driver.forward()

5.刷新当前页面

driver.refresh()

6.获取网页title

driver.title

7.获取窗口句柄

WebDriver不会在窗口和选项卡之间进行区分。如果您的站点打开一个新的选项卡或窗口,Selenium将允许您使用窗口句柄来使用它。每个窗口都有一个唯一的标识符,该标识符在单个会话中保持不变。您可以使用以下方法获取当前窗口的窗口句柄:

driver.current_window_handle

8.切换窗口或标签

点击一个链接,该链接会在 新窗户 将使新窗口或选项卡聚焦在屏幕上,但是WebDriver将不知道操作系统认为哪个窗口处于活动状态。要使用新窗口,您将需要切换到它。如果只有两个选项卡或窗口打开,并且您知道从哪个窗口开始,则通过消除过程,您可以遍历WebDriver可以看到的两个窗口或选项卡,然后切换到非原始窗口或选项卡。

但是,Selenium 4提供了新的API 新窗户 这会创建一个新的标签页(或新窗口)并自动切换到该标签页。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Start the driver
with webdriver.Firefox() as driver:
    # Open URL
    driver.get("https://seleniumhq.github.io")

    # Setup wait for later
    wait = WebDriverWait(driver, 10)

    # Store the ID of the original window
    original_window = driver.current_window_handle

    # Check we don't have other windows open already
    assert len(driver.window_handles) == 1

    # Click the link which opens in a new window
    driver.find_element(By.LINK_TEXT, "new window").click()

    # Wait for the new window or tab
    wait.until(EC.number_of_windows_to_be(2))

    # Loop through until we find a new window handle
    for window_handle in driver.window_handles:
        if window_handle != original_window:
            driver.switch_to.window(window_handle)
            break

    # Wait for the new tab to finish loading content
    wait.until(EC.title_is("SeleniumHQ Browser Automation"))

9.创建新窗口(或)新标签并切换

创建一个新窗口(或)选项卡,并将新窗口或选项卡聚焦在屏幕上。您无需切换为使用新窗口(或)标签。如果您在新窗口之外打开了两个以上的窗口(或)选项卡,则可以在WebDriver可以看到的两个窗口或选项卡上循环,然后切换到非原始窗口或选项卡。

# Opens a new tab and switches to new tab
driver.switch_to.new_window('tab')

# Opens a new window and switches to new window
driver.switch_to.new_window('window')

10.关闭窗口或标签

当完成一个窗口或选项卡并且它不是浏览器中最后一个打开的窗口或选项卡时,应将其关闭并切换回以前使用的窗口。假设您按照上一节中的代码示例进行操作,则先前的窗口句柄将存储在变量中。放在一起,您将获得

#Close the tab or window
driver.close()

#Switch back to the old tab or window
driver.switch_to.window(original_window)

11.通过ID定位元素

driver.find_element(By.ID, "cheese")

12.通过css 选择器定位元素

cheddar = driver.find_element_by_css_selector("#cheese #cheddar")

13.定位多个同样选择器的元素

<ol id=cheese>
 <li id=cheddar>…
 <li id=brie>…
 <li id=rochefort>…
 <li id=camembert>…
</ol>


mucho_cheese = driver.find_elements_by_css_selector("#cheese li")

14.优选选择id,其次CSS选择器进行定位

使用选择器的提示

通常,如果HTML ID可用,唯一且始终可预测,则它们是在页面上定位元素的首选方法。它们趋向于非常快速地工作,并且放弃了复杂的DOM遍历所带来的大量处理。

如果没有唯一的ID,则最好使用编写良好的CSS选择器来查找元素。XPath和CSS选择器一样好用,但是语法很复杂,并且经常很难调试。尽管XPath选择器非常灵活,但是它们通常未经浏览器供应商的性能测试,并且运行速度往往很慢。

15.相对定位,上方定位例子

from selenium.webdriver.support.relative_locator import with_tag_name

passwordField = driver.find_element(By.ID, "password")
emailAddressField = driver.find_element(with_tag_name("input").above(passwordField))

16.相对定位,下方定位例子

import static org.openqa.selenium.support.locators.RelativeLocator.withTagName;

WebElement emailAddressField= driver.findElement(By.id("email"));
WebElement passwordField = driver.findElement(withTagName("input")
	                                          .below(emailAddressField));

17.查找元素并输入值

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()

driver.get("http://www.google.com")

# Get search box element from webElement 'q' using Find Element
search_box = driver.find_element(By.NAME, "q")

search_box.send_keys("webdriver")

18.查找元素返回列表

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()

# Navigate to Url
driver.get("https://www.example.com")

# Get all the elements available with tag name 'p'
elements = driver.find_elements(By.TAG_NAME, 'p')

for e in elements:
    print(e.text)

19.从父元素中查询单个元素

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()
driver.get("http://www.google.com")
search_form = driver.find_element(By.TAG_NAME, "form")
search_box = search_form.find_element(By.NAME, "q")
search_box.send_keys("webdriver")

20.从父元素中查询元素列表

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.example.com")

# Get element with tag name 'div'
element = driver.find_element(By.TAG_NAME, 'div')

# Get all the elements available with tag name 'p'
elements = element.find_elements(By.TAG_NAME, 'p')
for e in elements:
    print(e.text)

21.获取具有焦点元素

from selenium import webdriver
  from selenium.webdriver.common.by import By

  driver = webdriver.Chrome()
  driver.get("https://www.google.com")
  driver.find_element(By.CSS_SELECTOR, '[name="q"]').send_keys("webElement")

  # Get attribute of current active element
  attr = driver.switch_to.active_element.get_attribute("title")
  print(attr)

22.查询是否可以连接 返回bool类型

# Navigate to url
driver.get("http://www.google.com")

# Returns true if element is enabled else returns false
value = driver.find_element(By.NAME, 'btnK').is_enabled()

23.查询是否选中 返回 bool类型

# Navigate to url
driver.get("https://the-internet.herokuapp.com/checkboxes")

# Returns true if element is checked else returns false
value = driver.find_element(By.CSS_SELECTOR, "input[type='checkbox']:first-of-type").is_selected()

24.获取元素tagname

# Navigate to url
driver.get("https://www.example.com")

# Returns TagName of the element
attr = driver.find_element(By.CSS_SELECTOR, "h1").tag_name

25.获取元素的CSS值

# Navigate to Url
driver.get('https://www.example.com')

# Retrieves the computed style property 'color' of linktext
cssValue = driver.findElement(By.LINK_TEXT, "More information...").value_of_css_property('color')

26.获取元素的文本

# Navigate to url
driver.get("https://www.example.com")

# Retrieves the text of the element
text = driver.find_element(By.CSS_SELECTOR, "h1").text

27.键盘操作 sendkeys

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()

# Navigate to url

driver.get("http://www.google.com")

# Enter "webdriver" text and perform "ENTER" keyboard action

driver.find_element(By.NAME, "q").send_keys("webdriver" + Keys.ENTER)

28.键盘操作 清楚

from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()

# Navigate to url

driver.get("http://www.google.com")
# Store 'SearchInput' element

SearchInput = driver.find_element(By.NAME, "q")
SearchInput.send_keys("selenium")
# Clears the entered text

SearchInput.clear()

29.单击某个元素不释放

from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()

# Navigate to url
driver.get("http://www.google.com")

# Store 'google search' button web element
searchBtn = driver.find_element(By.LINK_TEXT, "Sign in")

# Perform click-and-hold action on the element
webdriver.ActionChains(driver).click_and_hold(searchBtn).perform()

30.移动单击右键

from selenium import webdriver
driver = webdriver.Chrome()

# Navigate to url
driver.get("http://www.google.com")

# Store 'google search' button web element
searchBtn = driver.find_element(By.LINK_TEXT, "Sign in")

# Perform context-click action on the element
webdriver.ActionChains(driver).context_click(searchBtn).perform()

31.双击某个元素

from selenium import webdriver
driver = webdriver.Chrome()

# Navigate to url
driver.get("http://www.google.com")

# Store 'google search' button web element
searchBtn = driver.find_element(By.LINK_TEXT, "Sign in")

# Perform double-click action on the element
webdriver.ActionChains(driver).double_click(searchBtn).perform()

32.鼠标释放左键

from selenium import webdriver
driver = webdriver.Chrome()

# Navigate to url
driver.get("https://crossbrowsertesting.github.io/drag-and-drop")

# Store 'box A' as source element
sourceEle = driver.find_element(By.ID, "draggable")
# Store 'box B' as source element
targetEle  = driver.find_element(By.ID, "droppable")

# Performs dragAndDropBy onto the target element offset position
webdriver.ActionChains(driver).click_and_hold(sourceEle).move_to_element(targetEle).perform()
#Performs release event
webdriver.ActionChains(driver).release().perform()