5.3 获取页面元素的相关信息

获取页面元素的信息主要有两个目的:一是执行完步骤后进行断言;二是获取前一步骤的响应结果,将其作为后续步骤的输入或判断条件。

本节我们带大家学习一下如何获取元素的相关信息。

5.3.1 获取元素的基本信息

◆目的

输出元素的大小、文本、标签名。

◆关键字

●.tag_name,输出元素的标签名。

●.size,输出元素的大小。

●.text,输出元素的文本(适用于链接元素)。

◆示例代码:test5_34.py

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/") #打开百度首页
ele = driver.find_element_by_link_text('新闻') #将新闻这个元素赋给变量ele
print(ele.tag_name) #输出标签名
print(ele.text) # 输出文本
print(ele.size) # 输出大小
driver.quit()

◆运行结果

新闻
{'height': 24, 'width': 26}

◆注意事项

按钮上的文字是不能通过“.text”来输出的。

5.3.2 获取元素的属性信息

◆目的

获取元素的属性信息,如id、name、class name、value等。

◆关键字

get_attribute('id/name/value等'):获取元素的属性信息。

◆示例代码:test5_35.py

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
ele1 = driver.find_element_by_id('su') # 通过id定位百度搜索按钮
ele2 = driver.find_element_by_id('kw') # 通过id定位百度搜索框

print(ele1.get_attribute('id'))  #输出搜索按钮的id属性
print(ele2.get_attribute('name')) #输出搜索框的name属性
print(ele1.get_attribute('value')) #输出按钮的文字,也就是value属性
print(type(ele1.get_attribute('name')))
print(ele1.get_attribute('name'))

driver.quit()

◆运行结果

su
wd
百度一下
<class 'str'>

◆注意事项

当要获取的元素无对应属性时,会返回一个空的字符串。

5.3.3 获取元素的CSS属性值

◆目的

输出元素的CSS属性值,如元素的高、宽、字体等。

◆关键字

value_of_css_property('height/width/font-family'):输出元素的CSS属性值。

◆示例代码:test5_36.py

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
ele = driver.find_element_by_link_text('新闻') #通过link_text定位新闻元素

#height,输出元素的高
print(ele.value_of_css_property('height'))
#width,输出元素的宽
print(ele.value_of_css_property('width'))
#font-family,输出元素所使用的字体
print(ele.value_of_css_property('font-family'))

driver.quit()

◆运行结果

24px
26px
arial

5.3.4 判断页面元素是否可见

◆目的

判断页面元素是否可见。

◆示例HTML:myhtml5_13.html



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>判断元素是否可见</title>
    <script type="text/javascript">
         function showAndHidden1() {
              var div1 = document.getElementById("div1");
              var div2 = document.getElementById("div2");
              if (div1.style.display == 'block') div1.style.display='none';
              else div1.style.display = 'block';
              if (div2.style.display == 'block') div2.style.display='none';
              else div2.style.display = 'block';
         }
         function showAndHidden2() {
              var div3 = document.getElementById("div3");
              var div4 = document.getElementById("div4");
              if (div3.style.visibility == 'visible') div3.style.visibility='hidden';
              else div3.style.visibility = 'visible';
              if (div4.style.visibility == 'visible') div4.style.visibility='hidden';
              else div4.style.visibility = 'visible';
         }
    </script>
</head>
<body>
    <div>display:元素不占用页面位置</div>
    <div id="div1" style="display:block">DIV 1</div>
    <div id="div2" style="display:none">DIV 2</div>
    <input id="button1" type="button" onclick="showAndHidden1();" value="DIV切换"/>
    <hr>
        <div>display:元素占用页面位置</div>
    <div id="div3" style="visibility: visible;">DIV 3</div>
    <div id="div4" style="visibility: hidden;">DIV 4</div>
    <input id="button2" type="button" onclick="showAndHidden2();" value="DIV切换"/>
</body>
</html>

◆关键字

is_displayed:判断元素是否可见,如果可见,返回True;反之,返回False。

◆示例代码:test5_37.py

from selenium import webdriver
from time import sleep
import os

"""
判断页面元素是否可见
"""
driver = webdriver.Chrome()
html_file = os.getcwd() + os.sep + 'myhtml5_13.html'
driver.get(html_file)
ele1 = driver.find_element_by_id('div1')
ele2 = driver.find_element_by_id('div2')
ele3 = driver.find_element_by_id('div3')
ele4 = driver.find_element_by_id('div4')

# 通过is_displayed方法判断页面元素是否可见
# 对于style="display: none;style="visibility: hidden,页面不可见
print("ele1 is display: {}".format(ele1.is_displayed()))
print("ele2 is display: {}".format(ele2.is_displayed()))
print("ele3 is display: {}".format(ele3.is_displayed()))
print("ele4 is display: {}".format(ele4.is_displayed()))

driver.find_element_by_id('button1').click()
driver.find_element_by_id('button2').click()
print("————————————————")

print("ele1 is display: {}".format(ele1.is_displayed()))
print("ele2 is display: {}".format(ele2.is_displayed()))
print("ele3 is display: {}".format(ele3.is_displayed()))
print("ele4 is display: {}".format(ele4.is_displayed()))

driver.quit()

◆运行结果

ele1 is display: True
ele2 is display: False
ele3 is display: True
ele4 is display: False
————————————————
ele1 is display: False
ele2 is display: True
ele3 is display: False
ele4 is display: True

5.3.5 判断页面元素是否可用

◆目的

判断页面元素是否可用。

◆示例HTML:myhtml5_14.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>判断页面元素是否可操作</title>
</head>
<body>
    <input id="input1" type="text" size="40" value="可操作">
    <input id="input2" type="text" size="40" value="不可用" disabled>
    <input id="input3" type="text" size="40" value="只读" readonly>
</body>
</html>

◆关键字

is_enabled:如果元素可用,返回True;反之,返回False。

◆示例代码:test5_38.py

from selenium import webdriver
from time import sleep
import os

"""
判断页面元素是否可用
"""
driver = webdriver.Chrome()
html_file = os.getcwd() + os.sep + 'myhtml5_14.html'
driver.get(html_file)
ele1 = driver.find_element_by_id('input1')
ele2 = driver.find_element_by_id('input2')
ele3 = driver.find_element_by_id('input3')

# 可以通过is_enabled方法判断页面元素是否可用
# 如果页面元素有“disabled”属性的话,则页面元素不可用
print("ele1 is enabled {}".format(ele1.is_enabled()))
print("ele2 is enabled {}".format(ele2.is_enabled()))
print("ele3 is enabled {}".format(ele3.is_enabled()))

driver.quit()

◆运行结果

ele1 is enabled True
ele2 is enabled False
ele3 is enabled True

◆注意事项

当某个元素被另外一个元素遮挡时,也会出现元素无法操作的情况。

5.3.6 判断元素的选中状态

◆目的

判断元素的选中状态。

◆关键字

is_selected:判断复选框或单选按钮的选中状态。

◆示例代码:test5_39.py

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://sahitest.com/demo/clicks.htm')
sleep(3)
ele = driver.find_element_by_xpath('/html/body/ul/li/a/label/input')
print(ele.is_selected()) # 判断复选框是否被选中,否,返回False
ele.click()              # 单击,使复选框处于选中状态
print(ele.is_selected()) # 判断复选框是否被选中,是,返回True
driver.quit()

◆运行结果

False
True

◆注意事项

如果选中或者取消选中复选框或单选按钮页面有加载时间的话,要合理使用等待,然后再判断选中状态。