元素定位应该很简单吧,话不多说,直接上我编写的代码示例,本篇着重【XPATH】的多种定位方式。
首先了解下元素定位
有哪几种方式
: -----常用前6种,后2种基本不用
id、
name、
link_text、
partial_link_text、
xpath、
css、
tag_name、
class_name
注:XPATH有一种定位方式测试失败,找了蛮多资料依旧失败,此处预留一个小遗憾.......,后续有空补上
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import ui
driver = webdriver.Chrome()
# 元素未加载完成时,会报NoSuchElementException异常,加上隐式等待5秒
driver.implicitly_wait(5)
driver.get("https://www.baidu.com")
# 元素定位方式:id,name,link_text,partial_link_text,xpath,css,tag_name,class_name(常用前6种,后2种基本不用)
# 元素定位之:name定位
# driver.find_element(By.NAME, "wd").send_keys("web自动化测试")
# 元素定位之:id定位
# driver.find_element(By.ID, "su").click()
# 元素定位之:link_text ---超链接文本定位
# driver.find_element(By.LINK_TEXT, "新闻").click()
# 元素定位之:partial_link_text ---部分超链接文本定位
# driver.find_element(By.PARTIAL_LINK_TEXT, "hao").click()
# 元素定位之:xpath定位
# xpath 绝对路径: 用一个/开头
# 找到元素所在行,右键Copy--Copy full Xpath,复制全部路径即可
# --------------- XPATH绝对路径方式【测试不成功,一直无法获取到元素】-----------------------
# sleep(15)
# ui.WebDriverWait(driver, 30).until(lambda driver: driver.find_element(By.XPATH, "/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input"))
# driver.find_element(By.XPATH, "/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input").send_keys("web自动化测试")
# driver.find_element(By.ID, "su").click()
# --------------- XPATH绝对路径方式【测试不成功,一直无法获取到元素】-----------------------
# xpath 相对路径:
# 相对路径 用双//开头,找到元素所在标签,不唯一往上找父标签,父标签不唯一再往上找父父标签://form/span/input 等同于标签索引为1 ,//form/span[1]/input
# driver.find_element(By.XPATH,"//form/span/input").send_keys("web自动")
# 相对路径+唯一属性定位:
# 若属性不唯一,可用多个属性,可以用and或者or:
# driver.find_element(By.XPATH, "//input[@autocomplete='off' and @class='s_ipt']").send_keys("web自动化测试")
# 相对路径+部分属性定位:
# 属性以什么开头,使用starts-with函数
# driver.find_element(By.XPATH, "//input[starts-with(@autocomplete,'o')]").send_keys("web自动化测试")
# 属性以什么结尾,使用substring函数,为截取意思,从属性值的下标为2开始截取到最后
# driver.find_element(By.XPATH, "//input[substring(@autocomplete,2)='ff']").send_keys("web自动化测试")
# 属性包含,使用contains函数
# driver.find_element(By.XPATH, "//input[contains(@autocomplete,'f')]").send_keys("web自动化测试")
# 相对路径+文本定位:(针对不是超链接的文本定位)
value = driver.find_element(By.XPATH, "//span[text()='按图片搜索']").get_attribute("class")
print(value)
# 相对路径+索引定位:
# 当元素所在标签不唯一,需要加上索引下标
# driver.find_element(By.XPATH, "//form/span[2]/input").click()
sleep(3)
driver.quit()
【面试题】 元素定位不到会如何分析?
1、元素是否加载完成
2、页面是否存在frame或者iframe框架
3、元素是否不可用(disable)、不可读(readonly)、不可见(hidden 或者style="display:none")
4、是否是动态元素(有前提条件)、动态div层、自定义控件(select)、通过ul和li自定义