selenium元素操作--判断元素是否可点击、可选中、是否可见
selenium元素操作--判断元素是否可点击、可选中、是否可见
判断元素是否可以点击
判断元素是否可以点击,WebElement对象调用 is_enabled() 方法。
is_enabled() 方法返回一个布尔值,若可点击返回: True 。若不可点击则返回: False
实例1:
driver = webdriver.Chrome() # 打开百度 driver.get('https://www.baidu.com/') # 定位百度首页的地图按钮 elm = driver.find_element_by_xpath('//*[@id="s-top-left"]/a[3]') # 判断元素是否可以点击 answer = elm.is_enabled() print(answer) time.sleep(3) driver.quit()
执行结果:True,故可以点击。
实例2:
在实际测试中,会遇到某些按钮置灰的情况:
1、比如,登录场景,只输入用户名或只输入密码时,“登录”按钮灰显,不可点击。
2、再比如,手机号码注册时,未输入正确长度手机号码时注册按钮置灰,对应代码:
<button class="btn submit" disabled='' style="background:rgp(204,204,204);">下一步button>
输入正确手机号码后,按钮变成可点击状态,对应代码:
<button class="btn submit" style="background:rgp(51, 172, 55);">下一步button>
此时测试用例中就可以断言未输入正确长度手机号码时按钮是否置灰:
btnElm = driver.find_element_by_xpath('') result = btnElm.is_enabled() print(result) assert not result #手机号码未输入正确,按钮应该灰显
判断元素是否可见
判断元素是否可见,WebElement对象调用 is_displayed() 方法。
is_displayed() 方法返回一个布尔值,若可见则返回:True ;若不可见则返回:False 。
代码如下:
driver = webdriver.Chrome() # 打开百度 driver.get('https://www.baidu.com/') # 定位百度首页的地图按钮 elm = driver.find_element_by_xpath('//*[@id="s-top-left"]/a[3]') # 判断元素是否可见 answer = elm.is_displayed() print(answer) driver.quit()
执行结果:True,故可见。
判断元素是否可被选中
判断元素是否被选中,WebElement对象调用 is_selected() 方法。
is_selected() 方法返回一个布尔值,若可见则返回: True 。若不可见则返回: False 。
代码如下:
driver = webdriver.Chrome() # 打开百度 driver.get('https://www.baidu.com/') # 定位百度首页的地图按钮 elm = driver.find_element_by_xpath('//*[@id="s-top-left"]/a[3]') # 判断元素是否可选中 answer = elm.is_selected() print(answer) driver.quit()
执行结果:False,说明未被选中。
总结
1、元素若有 is_disabled 属性,则是不可点击,否则就是可点击。
2、元素若有 is_display:none 属性,则是不可见的,否则就是可见的。
3、元素若有 selected 属性,则是已被选择。
selenium 判断隐藏元素是否显示常用方法以及JavaScript对自动化的一些操作
示例:
1、隐藏前
2、点击 visible text 按钮后(vip客户专属 元素的id属性为vip,)
对于需要点击按钮显示元素的常用方法:
visible=browser.find_element_by_xpath('//*[contains(@value,"visilbe")]') # visible text按钮的元素定位 visible.click() # 点击visible text按钮
判断 vip客户专属 元素是否出现
1、 is_displayed 方法判断元素是否出现
'''
第一种is_displayed判断元素是否出现
''' vip=browser.find_element_by_id("vip") # vip客户专属 元素定位 if vip.is_displayed(): print("pass") else: print("fail")
2、根据元素的属性值去判断
''' 第二种:根据元素属性值去判断 get_attribute("style")获取元素的属性 ''' vip=browser.find_element_by_id("vip") # vip客户专属 元素定位 style = vip.get_attribute("style") # 获取vip 元素的style属性值 ("color: rgb(204, 0, 0); visibility: visible;") if "visible" in style: print("pass") else: print("fail")
3、根据元素在页面出现的次数判断
''' 第三种:根据元素在页面出现的次数去判断结果 find_elements_by_xpath ''' vip_ele_count=len(browser.find_elements_by_xpath('//*[contains(@style,"visible")]')) print(vip_ele_count) if vip_ele_count==1: print("pass") else: print("fail")
4、通过JavaScript语句使 vip客户专属 元素显示
visible = browser.find_element_by_xpath('//*[contains(@value,"visilbe")]') # 点击 visible text 按钮 visible.click() js = 'return document.getElementById("vip").style.visibility' # 获取vip客户专属 元素的style属性的visibility属性值 style = browser.execute_script(js) # 执行js语句 print(style)
JavaScript对自动化的一些操作
'''js:javascript:可以获取浏览器提供的很多对象,并进行操作
window:浏览器窗口
location:当前页面的URL对象
document:整个DOM树形结构
打开浏览器-开发者工具-console控制台
'''
"设置3000毫秒后打开debugger调试台"----->页面暂停(用来捕获即将消失的弹窗。。。定位转瞬即失的元素)
setTimeout(function(){debugger}, 3000)
'''window:浏览器窗口'''
window.open("https://www.baidu.com") 新打开一个窗口
window.innerHeight
window.innerWidth
window.outerWidth
window.scrollTo(0,10000000000) #滚动条
window.scrollTo(0,window.innerHeight)
'''location:当前页面的URL对象'''
location.reload() 刷新页面
location.href() 获取当前网址
location.assign("https://wwww.baidu.com") #更改当前url
'''document:整个DOM树形结构'''
#获取主题:
document.title
点击元素:
document.getElementById("testid").click()
输入值:
document.getElementsByName("username")[0].value='12345678'
获取文本值:
document.getElementsByClassName("testclassname")[0].textContent
更改属性:
document.getElementById("vip").style.visibility="visible"
获取返回值:
return +js (在robot framework框架中使用js语句的时候,同样的语法格式)
'''窗口滚动条:'''
window.scrollTo(0,100000000)
window.scrollTo(0,document.body.scrollHeight)
window.scrollTo(document.body.scrollHeight,0)
非窗口类型滚动条:先找到这个元素,再用scrollTop去滑动
document.getElementById("styleShow").scrollTop='10000'
滚动条滑动到指定的元素:先找到这个元素,scrollIntoView
document.getElementsByClassName("feednews-header")[0].scrollIntoView(true)
'''js,高亮某个元素,'''
hidden=browser.find_element_by_xpath("/html/body/input[1]")
visible=browser.find_element_by_xpath("/html/body/input[2]")
browser.execute_script('arguments[0].style.border="3px solid red"',hidden) #高亮某个元素
browser.execute_script('arguments[0].style.border="3px solid red";arguments[1].style.border="3px solid yellow"',hidden,visible) #高亮多个元素