查找多个元素
当无法定位一个元素时, 可以尝试定位一组元素, 然后再这一组元素里面进行筛选
作为一个UI自动化测试开发, 应该对于前端html代码有一个详尽的了解(定位多个)

classlist=dr.find_elements('class name','el-input__inner')
print(classlist)
for element in classlist:
	# 获取元素的属性值
	if element.get_attribute('type')=='text':
		'说明这是账号输入框'
		element.clear()
		time.sleep(2)
		element.send_keys('demo')
	else:
		# 因为类别仅有两个值, 所以账号输入框找到之后, 定位的就是密码输入框
		element.clear()
		time.sleep(2)
		element.send_keys('123456')
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
#不自动关闭
options.add_experimental_option("detach", True)
#这是创建一个driver对象,获取浏览器控制权
dr = webdriver.Chrome(options=options)
#访问url地址
dr.get('file:///C:/Users/Administrator/Desktop/example.html')

element_input=dr.find_elements('tag name','input')
dr.implicitly_wait(5)
dr.maximize_window()
time.sleep(1)
#循环取值所有的Input元素
for check in element_input:
    #筛选复选框,如果是复选框,则click()
    if check.get_attribute("type") == "checkbox":
        check.click()

#

精确的文本定位 不算特别靠谱,如果保证页面仅存在该文本,可以使用。

dr.find_element( by: 'link text', value: "新闻").click()

定位 模糊的文本定位。 不太靠谱。不建议使用。

dr.find_element( by: 'partial link text', value: "新').click()

如果通过点击链接等方式,打开了新的窗口,这时候浏览器控制权也就是driver的控制权还是在原来的窗口,新的窗口并没有取得控制权,所以driver还可以控制原网页。新窗口无法进行控制.
如果要操作新窗口,需要将控制权切换到新窗口。这时候涉及名词叫做句柄,这种行为叫做切换句柄

获取当前窗口的句柄 (之前在控制的页面)(当前拥有控制权的句柄), 打开网页之后, 在电脑的连接池中, 会给每一个打开的窗口一个唯一的标识这个唯一的标识就叫做句柄

#原来的窗口,新的窗口并没有取得控制权,所以driver还可以控制原网页
handle=dr.current_window_handle  # (之前在控制的页面)

获取所有窗口的句柄(依次对应)

handle=dr.window_handles

切换窗口, handle是指根据句柄切换窗口

handle=dr.window_handles
dr.switch_to.window(handle[1])
dr.find_element( by: 'id', value: 'ww').send_keys('我要发大财')
print(handle)

调用js语法打开新窗口

dr.execute_script('window.open("https://www.baidu.com")')

Pasted image 20250515103217.png

CSS定位:(效率比xpath高)

CSS 定位
CSS :cascading style sheets是一种语言,它用来描述HTML、XML文档的表
现。CSS通过选择器为页面元素绑定属性。

css的id定位, 如果要用class定位,比如说class='abc' 那么就 .abd

dr.find_element('css selector', '#kw').send_keys(test text)

css定位还支持[属性名='属性值']的方式,如果连续写两个,说明是找查id=kw并且name=wd的元素

dr.find_element(by: 'css selector', value: "[id="kw"][name="wd"]').send_keys("test text")

坐标的的定位(网页中嵌套多个frame, 或者子网页)(动态元素导致无法定位)(其他原因, 属性值错误)

moveTo 指的是移动到指定的坐标 (花费5秒钟)

pyautogui.moveTo(99, 171,5)
pyautogui.click()  # 点击(是autogui自己的click())

使用autogui必须将电脑的屏幕分辨率设置为: 1080P

相对定位器中的五种方法: