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) # 执行结果:True,故可以点击。
time.sleep(3)
driver.quit()

实例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('id')
result = btnElm.is_enabled()
print(result)
assert not result   #手机号码未输入正确,按钮应该灰显

判断元素是否可见

判断元素在页面上是否可见,WebElement对象调用 is_displayed() 方法。

注意:虽然此时的元素不可见,但是元素确实可以定位到。

拓展:css实现元素隐藏和显示的属性有哪些?

实现属性有:
1)display属性,值为“none”时隐藏元素,为“block”时显示元素;(在项目中的实现方式居多)
2)visibility属性,值为“hidden”时隐藏元素,为“visible”时显示元素;
3)overflow属性;
4)opacity属性。

1:display属性

    display: none; 隐藏对象

    display: block;除了转换为块级元素之外,还有显示元素的意思

注意:display隐藏元素之后,不再占有原来的位置

2:visibility属性

    visibility: visible; 元素可视

    visibility: hidden; 元素隐藏

注意:visibility隐藏元素后,继续占有原来的位置

3:overflow属性(溢出内容的显示与隐藏)

overflow: visible | hidden | scroll | auto

属性值具体说明见下表:

属性值    说明
visible    不剪切内容,也不添加滚动条
hidden    隐藏超出的部分
scroll    不管内容是否超出,都显示滚动条
auto            只有内容超出时才显示滚动条,不超出则不显示

4:opacity属性

    opacity: 0; 隐藏元素

    opacity: 1; 显示元素

opacity属性的意思是检索或设置对象的不透明度。当他的透明度为0的时候,视觉上它是消失了;但是他依然占据着那个位置,并对网页的布局起作用。

注意:添加了opacity属性的元素,它的背景和元素内容也是会跟着变化的。

 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,说明未被选中。

问题:有一个选项框,本身就是选中状态,如果再点击一下,它就反而变成了未被选中的状态,期望结果是该选项框处于选中状态;当该选项框为未选中状态时,判断去点击选中该选项框;当该选项框处于选中状态时,不做任何操作。

解决思路: is_selected() 检查是否选中该元素,一般针对单选框复选框,返回的结果是bool 值,元素处于未选中状态的时候返回 False,元素处于选中状态时返回 True。

from selenium import webdriver
driver
= webdriver.Chrome()
driver.maximize_window()
driver.get(
"https://www.baidu.com/gaoji/preferences.html")
element
= driver.find_element_by_xpath("//*[text()='仅简体中文']")
if element.is_selected(): print("元素已经被选中") else: print("元素没有被选中")
driver.quit()

总结

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) #高亮多个元素

 

posted @ 2022-03-23 16:18  习久性成  阅读(10442)  评论(0编辑  收藏  举报