查找多个元素
当无法定位一个元素时, 可以尝试定位一组元素, 然后再这一组元素里面进行筛选
作为一个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")')
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
相对定位器中的五种方法: