元素定位:

  1. id定位:
     

    driver.get("https://www.baidu.com/")
    driver.find_element(By.ID,"kw").send_keys("软件测试")
    driver.find_element(By.ID,"su").click()

  2. class_name定位:
     

    driver.get("https://www.bilibili.com/")
    #如果不指定下角标的话,默认选择第一个
    #driver.find_element(By.CLASS_NAME,'channel-link').click()
    
    #有下角标,选择下角标指定的
    elements = driver.find_elements(By.CLASS_NAME,'channel-link')
    elements[5].click()

  3. name定位
     

    from time import sleep
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    driver.get('https://sahitest.com/demo/alertTest.htm')
    driver.maximize_window()
    
    driver.find_element(By.NAME, 'b2').click()
    sleep(2)
    
    driver.close()

  4. LINK_TEXE定位
     

    driver.get("https://www.bilibili.com/")
    driver.find_element(By.LINK_TEXT,'番剧').click()

  5. CSS定位
     

    from time import sleep
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('https://www.baidu.com/')
    #driver.get('https://www.bilibili.com/')
    
    #css,根据id定位
    #driver.find_element(By.CSS_SELECTOR,'#kw').send_keys('影石')
    #driver.find_element(By.CSS_SELECTOR,'#su').click()
    
    #css,根据class定位
    #driver.find_element(By.CSS_SELECTOR,'.nav-search-input').send_keys('哈哈哈')
    #driver.find_element(By.CSS_SELECTOR,'.nav-search-btn').click()
    
    #css,根据属性值定位
    #driver.find_element(By.CSS_SELECTOR,'[name="wd"]').send_keys("123")
    #driver.find_element(By.CSS_SELECTOR,'#su').click()
    
    #css,根据标签定位
    #driver.find_element(By.CSS_SELECTOR,"a[href='//www.bilibili.com/anime/']").click()
    #模糊查找,根据开头匹配,在“=”前加上“*”
    #driver.find_element(By.CSS_SELECTOR,"a[href*='bilibili.com/movie/']").click()
    #根据开头匹配,在“=”前加上“^”
    #driver.find_element(By.CSS_SELECTOR,"a[href^='//www.bilibili.com/ani']").click()
    #根据结尾匹配,在“=”前加上“$”
    #driver.find_element(By.CSS_SELECTOR,"a[href$='com/anime/']").click()
    
    #组合查找:input标签+id值为nav-search-input
    #driver.find_element(By.CSS_SELECTOR,'input.nav-search-input').click()
    
    #定位子元素
    #组合id进行定位,id值前需要加“#”
    #driver.find_element(By.CSS_SELECTOR,"div#s-top-left>a").click()
    #组合class进行定位,id值前需要加“.”
    #driver.find_element(By.CSS_SELECTOR,"div.s-top-left-new.s-isindex-wrap>a").click()
    #加上:nth-child()对子元素进行定位,()括号内可指定第几个子元素
    #driver.find_element(By.CSS_SELECTOR,"div#s-top-left>a:nth-child(3)").click()
    #find_elements加上[n]进行定位
    #driver.find_elements(By.CSS_SELECTOR,"div#s-top-left>a")[3].click()
    
    #通过复制
    driver.find_element(By.CSS_SELECTOR,"#s-top-left > a:nth-child(5)").click()
    sleep(5)
    

  6. XPATH定位
     

    import time
    from time import sleep
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('https://www.baidu.com/')
    
    #绝对路径
    #driver.find_element(By.XPATH,"/html/body/div[1]/div[2]/div[6]/div/div/div[2]/div/div[1]/div/div[1]/div/div/ul/li[1]/a/span[1]").click()
    
    #相对路径,根据id定位; 属性前需要加上“@”
    #driver.find_element(By.XPATH,'//input[@id="kw"]').send_keys("原神启动")
    #driver.find_element(By.XPATH,'//input[@id="su"]').click()
    
    #相对路径,组合条件查询; * 表示任意标签;
    #driver.find_element(By.XPATH,'//*[@id="s-top-left"]/a[4]').click()
    #driver.find_element(By.XPATH,'//*[@class="s-top-left-new s-isindex-wrap"]/a[4]').click()
    
    #通过子元素去找父元素
    #driver.find_element(By.XPATH,'//*[@class="s-top-left-new s-isindex-wrap"]/a[2]').click()
    
    #通过文本去查找
    #[text()="中共中央政治局召开会议"] 表示查找文本内容完全等于“中共中央政治局召开会议”的 <span> 标签
    #driver.find_element(By.XPATH,'//span[text()="中共中央政治局召开会议"]').click()
    
    #根据同级弟弟定位
    #following::a 表示在包含“贴吧”文本的 <a> 标签之后的所有 <a> 标签; [1] 表示选择第一个紧跟在“贴吧”链接之后的 <a> 标签
    #driver.find_element(By.XPATH,'//a[contains(text(),"贴吧")]/following::a[1]').click()
    
    # #根据同级哥哥定位;
    # preceding::a 表示在包含“贴吧”的 <a> 标签之前的所有 <a> 标签; [2] 表示选择倒数第二个符合条件的 <a> 标签
    driver.find_element(By.XPATH,'//a[contains(text(),"贴吧")]/preceding::a[2]').click()
    
    
    
    time.sleep(5)


    常见的选择框练习:
     

单选框radio定位:

  练习网址:https://www.iviewui.com/view-ui-plus/component/form/radio

import time

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

driver = webdriver.Chrome()
driver.get('https://www.iviewui.com/view-ui-plus/component/form/radio')

driver.maximize_window()

#driver.find_elements(By.XPATH,'//span/input[@type="radio"and@class="ivu-radio-input"]')[6].click()
#/..:向上一级,定位 <i> 元素的父元素。
#/span[contains(text(),"Android")]:从父元素继续定位一个包含文本 "Android" 的 <span> 子元素。
driver.find_element(By.XPATH,'//i[@class="ivu-icon ivu-icon-social-android"]/../span[contains(text(),"Android")]').click()

time.sleep(5)
driver.close()

CheckBox多选框定位:

 网址:https://www.iviewui.com/view-ui-plus/component/form/checkbox

from time import sleep

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

driver = webdriver.Chrome()
driver.get('https://www.iviewui.com/view-ui-plus/component/form/checkbox')
driver.maximize_window()

#driver.find_element(By.XPATH,'//span[text()="香蕉"]').click()
driver.find_element(By.XPATH,'//span[text()="香蕉"]/preceding-sibling::span/input').click()
sleep(2)
#driver.find_element(By.XPATH,'//span[text()="苹果"]').click()
driver.find_element(By.XPATH,'//span[text()="苹果"]/preceding-sibling::span/input').click()
sleep(3)
#driver.find_element(By.XPATH,'//span[text()="西瓜"]').click()
driver.find_element(By.XPATH,'//span[text()="西瓜"]/preceding-sibling::span/input').click()
sleep(4)
driver.close()

select下拉框定位:

 网址:https://sahitest.com/demo/selectTest.htm

from time import sleep

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select

driver = webdriver.Chrome()
driver.get('https://sahitest.com/demo/selectTest.htm')
driver.maximize_window()

#通过 ID s3Id 定位 <select> 元素,并使用 Select 对象进行包装,从而可以方便地使用 Select 的方法来选择下拉选项。
select = Select(driver.find_element(By.ID,'s3Id'))
#选择不同选项的三种方法:
#通过选项的索引来选择第4个选项(索引从0开始)
#select.select_by_index(3)

#通过选项的显示文本来选择某个选项(这里是 'o1')
#select.select_by_visible_text('o1')

#使用 <option> 元素的 value 属性值来选择指定选项,这里是 'o4val'
select.select_by_value('o4val')
sleep(2)

driver.close()

级联选择器定位:

 网址: https://www.iviewui.com/view-ui-plus/component/form/cascader

from time import sleep

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

driver = webdriver.Chrome()
driver.get('https://www.iviewui.com/view-ui-plus/component/form/cascader')
driver.maximize_window()

driver.find_element(By.XPATH, '//div[@class="ivu-input-wrapper ivu-input-wrapper-default ivu-input-type-text"]/input[@type="text"and@placeholder="请选择"]').click()
sleep(1)
driver.find_elements(By.XPATH, '//li[contains(text(),"江苏")]')[0].click()
sleep(1)
driver.find_element(By.XPATH, '//li[contains(text(),"苏州")]').click()
sleep(1)
driver.find_elements(By.XPATH, '//li[contains(text(),"狮子林")]')[0].click()
sleep(2)

driver.close()

日期选择器定位:

三种弹框形式实战(Alert,confirm,prompt)

 网址:https://sahitest.com/demo/alertTest.htm

from time import sleep

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

driver = webdriver.Chrome()
driver.get('https://sahitest.com/demo/alertTest.htm')
driver.maximize_window()

driver.find_element(By.NAME, 'b2').click()
sleep(2)
#driver.switch_to.alert 用于定位当前页面上的弹窗
#accept() 方法用于点击弹窗上的“确定”或“接受”按钮,关闭弹窗
driver.switch_to.alert.accept()
sleep(2)

driver.close()

 网址:https://sahitest.com/demo/confirmTest.htm

from time import sleep

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

driver = webdriver.Chrome()
driver.get('https://sahitest.com/demo/confirmTest.htm')
driver.maximize_window()

driver.find_element(By.NAME, 'b1').click()
sleep(2)
print(driver.switch_to.alert.text)
#accept()接收
driver.switch_to.alert.accept()
sleep(2)

driver.find_element(By.NAME, 'b1').click()
sleep(2)
print(driver.switch_to.alert.text)
#dismiss取消
driver.switch_to.alert.dismiss()
sleep(2)

driver.close()

 网址:https://sahitest.com/demo/promptTest.htm

from time import sleep

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

driver = webdriver.Chrome()
driver.get('https://sahitest.com/demo/promptTest.htm')
driver.maximize_window()

driver.find_element(By.NAME, 'b1').click()
sleep(2)
driver.switch_to.alert.send_keys("原神启动")
print(driver.switch_to.alert.text)
driver.switch_to.alert.accept()
sleep(2)

driver.find_element(By.NAME, 'b1').click()
sleep(2)
driver.switch_to.alert.send_keys("原神不启动")
print(driver.switch_to.alert.text)
driver.switch_to.alert.dismiss()
sleep(2)

driver.close()

文件上传upload:

 练习网址:https://sahitest.com/demo/php/fileUpload.htm

from time import sleep

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

from utils.get_filepath import get_filepath

driver = webdriver.Chrome()
driver.get('https://sahitest.com/demo/php/fileUpload.htm')
driver.maximize_window()

#文件路径我们要用相对的路径,因为每个人的电脑文件存储存储位子是不一样的
path = get_filepath()

upload = driver.find_elements(By.ID,'file')[0]
#send_keys 方法可以模拟用户在文件选择器中选择文件的操作,将文件路径(由变量 path 提供)输入到文件上传控件中
#r"{}".format(path) 的格式化语句确保路径以原始字符串的形式传入,避免转义字符影响
upload.send_keys(r"{}".format(path))
sleep(2)
driver.find_elements(By.NAME,'submit')[0].click()
sleep(2)

driver.close()

get_filepath()方法:

 

上面的图片是需要上传文件的目录层级,每个人的相对目录层级不一样,需要对照自己的目录层级修改。下面是我的代码参考:

import os

def get_filepath():
    #获取当前文件的绝对路径:os.path.realpath(__file__)
    #定位上一级目录:os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
    #拼接目标路径:os.path.join(..., "file", "实习证明.docx")
    path = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))),"file","实习证明.docx")
    return path

iframe:

 练习网址: https://sahitest.com/demo/iframesTest.htm

from time import sleep

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

driver = webdriver.Chrome()
driver.get('https://sahitest.com/demo/iframesTest.htm')
driver.maximize_window()

#先定位到 ID 为 checkRecord 的输入框,并清空其中的已有内容
driver.find_element(By.CSS_SELECTOR,'input[id="checkRecord"]').clear()
#再次定位到同一个输入框,并输入内容 "666"
driver.find_element(By.CSS_SELECTOR,'input[id="checkRecord"]').send_keys("666")
sleep(3)

#通过下标
#将浏览器的上下文切换到页面中的第2个 iframe(索引从0开始)
#在切换之后,后续代码将只能访问该 iframe 内的元素,而无法直接操作主页面上的元素
driver.switch_to.frame(1)
driver.find_element(By.CSS_SELECTOR,'a[href="index.htm"]').click()
sleep(5)


driver.close()

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐