各种控件:
下拉框:
大部分可以通过先点击下拉框,再点击选项进行操作
通过下标,value,文本,取值:
sel = driver。find_element(By.ID,'select')#先找到下拉框
select = Select(sel)创建select可选对象
select.select_by_index(2)#取下拉框里面的值,下标从0开始,直接选中
select.select_by_value("属性值")#通过value定位 select.select_by_visivle_text("文本值")
多选下拉框用法同上
select.select_by_visible_text("选项1")
select.select_by_index(2) select.select_by_value("option2") #取消选项
select.deselect_by_visible_text("选项1") select.deselect_by_value("option2")
select.deselect_by_index(2)
同样属性值元素过多,定位不到元素时,可以尝试找元素的上一级先定位,排除部分不想定位的元素
import time from selenium
import webdriver from selenium.webdriver.common.by
import By from selenium.webdriver.support.wait
import WebDriverWait from selenium.webdriver.support import expected_conditions as ec driver = webdriver.Chrome() driver.get("http://novel-admin.hctestedu.com/login") driver.find_element(By.NAME,'username').send_keys('测试权限账号') driver.find_element(By.NAME,'password').send_keys('ceshiquanxianzhanghao')
while True:
if input()=='ok':
break driver.find_element(By.ID,"login").click()
time.sleep(3)
driver.find_element(By.XPATH,'//*[text()="系统管理"]').click() time.sleep(2)
driver.find_element(By.XPATH,'//*[text()="数据权限"]').click() time.sleep(3) #切换iframe WebDriverWait(driver,10).until(ec.frame_to_be_available_and_switch_to_it((By.NAME,"iframe3")))
#点击下拉框
driver.find_element(By.ID,'moduleName_chosen').click()
time.sleep(2)
#获取下拉框 alist=driver.find_element(By.CSS_SELECTOR,".chosen-results")
time.sleep(3)
alist.find_element(By.XPATH,"//*[@data-option-array-index='2']").click()
注意:有readonly属性是需要去掉该属性,通过以下js方法:
driver.execute_script(""" var input=document.getElementById("deptName") input.removeAttribute("readonly") """)
需注意:去掉只读属性后,控件变为可输入控件,需要写输入脚本输入内容,而不是点击或其他操作!
窗口跳转:
all_handles= driver.window_handles driver.switch_to.window(all_handles[-1]) #可以跳转到新建的窗口
如果遇到多层iframe嵌套,一级一级从A进入到C后,又想进入B,可以用driver.swich_to.parent_frame 退回;
如果要退回到A,可以driver.swich_to_default_content()
driver = webdriver.Chrome()
driver.get("xxxxxxxxxxxxxxx")#登录页面 driver.find_element(By.NAME,'username').send_keys('测试权限账号')#输入账号 driver.find_element(By.NAME,'password').send_keys('ceshiquanxianzhanghao')#输入密码
#使用循环等待输入验证码
while True:
if input()=='ok':
break
driver.find_element(By.ID,"login").click()#点击登录
time.sleep(3)
driver.find_element(By.XPATH,'//*[text()="系统管理"]').click()
time.sleep(2)
#定位至用户管理
driver.find_element(By.PARTIAL_LINK_TEXT,'用户管理').click()
time.sleep(2)
#定位iframe
driver.find_element(By.NAME,'iframe1')
time.sleep(2)
driver.switch_to.frame('iframe1')#写入iframe1
time.sleep(2)
driver.find_element(By.XPATH,'//*[@type="button" and @class="btn btn-primary"]').click()#点击添加按钮
time.sleep(2)
driver.find_element(By.ID,'layui-layer-iframe2')#定位iframe2 time.sleep(2)
driver.switch_to.frame('layui-layer-iframe2')#切入iframe2 time.sleep(2)
driver.find_element(By.ID,'name').send_keys('ceshi1')#输入用户名 time.sleep(2)
driver.find_element(By.ID,'username').send_keys('ceshi222') time.sleep(2)
driver.find_element(By.ID,'password').send_keys('123456') driver.execute_script(""" var
input=document.getElementById("deptName") input.removeAttribute("readonly") """)#去掉部门名称只读属性 #选择部门 time.sleep(2) dept_name=driver.find_element(By.ID,'deptName')#定位部门名称输入框 dept_name.send_keys("测试二部") time.sleep(2)
driver.find_element(By.ID,'email').send_keys('123456@163.com') time.sleep(2)
driver.find_element(By.XPATH,'//*[@name="status" and @value="1"]').click() time.sleep(2)
driver.find_element(By.XPATH,'//*[@name="role" and @value="9"]').click() time.sleep(2)
driver.find_element(By.XPATH,'//*[@name="role" and @value="8"]').click() time.sleep(4)
driver.find_element(By.XPATH,"//*[text()='提交']").click()