操控元素的基本方法


点击这里,边看视频讲解,边学习以下内容


选择到元素之后,我们的代码会返回元素对应的 WebElement对象,通过这个对象,我们就可以 操控 元素了。

操控元素通常包括

  • 点击元素

  • 在元素中输入字符串,通常是对输入框这样的元素

  • 获取元素包含的信息,比如文本内容,元素的属性


点击元素

点击元素 非常简单,就是调用元素WebElement对象的 click方法。前面我们已经学过。

这里我们要补充讲解一点。

当我们调用 WebElement 对象的 click 方法去点击 元素的时候, 浏览器接收到自动化命令,点击的是该元素的 中心点 位置 。

例如,对于下面的这样一个元素

out

我们要点击 添加客户 这个按钮,既可以点击 右边对应的 绿色框子总的button 元素 ,也可以点击红色框子中的span元素 。

因为这两个元素的中心点都是 button 内部,都是有效点击区域


输入框

输入字符串 也非常简单,就是调用元素WebElement对象的send_keys方法。前面我们也已经学过。


如果我们要 把输入框中已经有的内容清除掉,可以使用WebElement对象的clear方法

请大家打开这个网址 http://f.python3.vip/webauto/test3.html

并且按F12,观察HTML的内容

我们要写一个自动化程序:要求在输入框中填入姓名:白月黑羽。

而且要做到输入框中已经有的提示字符,需要先 清除掉

代码应该如下

element = wd.find_element_by_id("input1")

element.clear() # 清除输入框已有的字符串
element.send_keys('白月黑羽') # 输入新字符串


获取元素信息

获取元素的文本内容

上一章,我们已经知道,通过WebElement对象的 text 属性,可以获取元素 展示在界面上的 文本内容。

比如

element = wd.find_element_by_id('animal')
print(element.text)

获取元素属性

通过WebElement对象的 get_attribute 方法来获取元素的属性值,

比如要获取元素属性class的值,就可以使用 element.get_attribute('class')

如下:

element = wd.find_element_by_id('input_name')
print(element.get_attribute('class'))

执行完自动化代码,如果想关闭浏览器窗口可以调用WebDriver对象的 quit 方法,像这样 wd.quit()

获取整个元素对应的HTML

要获取整个元素对应的HTML文本内容,可以使用 element.get_attribute('outerHTML')

如果,只是想获取某个元素 内部 的HTML文本内容,可以使用 element.get_attribute('innerHTML')

获取输入框里面的文字

对于input输入框的元素,要获取里面的输入文本,用text属性是不行的,这时可以使用 element.get_attribute('value')

比如

element = wd.find_element_by_id("input1")
print(element.get_attribute('value')) # 获取输入框中的文本

获取元素文本内容2

通过WebElement对象的 text 属性,可以获取元素 展示在界面上的 文本内容。

但是,有时候,元素的文本内容没有展示在界面上,或者没有完全完全展示在界面上。 这时,用WebElement对象的text属性,获取文本内容,就会有问题。

出现这种情况,可以尝试使用 element.get_attribute('innerText') ,或者 element.get_attribute('textContent')


扫码分享给朋友,一起学更有动力哦




课后练习

题目1

点击这里下载 白月SMS系统的测试用例文档,白月SMS系统的 安装步骤 可以参考 课程1的课后练习

完成用例 UI-0102UI-0103 的自动化



参考答案

  • 用例 UI-0102
from selenium import webdriver
from time import sleep

wd = webdriver.Chrome()
wd.implicitly_wait(5)

wd.get('http://127.0.0.1/mgr/sign.html')

# 根据 ID 选择元素,并且输入字符串
wd.find_element_by_id('username').send_keys('byhy')
wd.find_element_by_id('password').send_keys('88888888')


# 根据标签名查找元素
wd.find_element_by_tag_name('button').click()


# 先找到上层节点,缩小查找范围
sidebarMenu = wd.find_element_by_class_name('sidebar-menu')

# 再找到内部元素
elements = sidebarMenu.find_elements_by_tag_name('span')

# 第一个span对应的菜单是 客户,点击它
elements[0].click()


# 点击添加客户按钮
wd.find_element_by_class_name('glyphicon-plus').click()

# form-contorl 对应3个输入框
inputs = wd.find_element_by_class_name('add-one-area')\
    .find_elements_by_class_name('form-control')

# 输入客户姓名
inputs[0].send_keys('南京中医院')
# 输入联系电话
inputs[1].send_keys('2551867858')
# 输入客户姓名
inputs[2].send_keys('江苏省-南京市-秦淮区-汉中路-16栋504')

# 第1个 btn-xs 就是创建按钮, 点击创建按钮
wd.find_element_by_class_name('add-one-area')\
    .find_element_by_class_name('btn-xs')\
    .click()

# 等待1秒
sleep(1)



# 找到 列表最上面的一栏
item = wd.find_elements_by_class_name('search-result-item')[0]

fields = item.find_elements_by_tag_name('span')[:6]

texts = [field.text for field in fields]
print(texts)

# 预期内容为
expected = [
'客户名:',
'南京中医院',
'联系电话:',
'2551867858',
'地址:',
'江苏省-南京市-秦淮区-汉中路-16栋504'
]

print(f'\n** 检查点 **  客户信息和添加内容一致 ')

if texts==expected:
    print('---->  通过')
else:
    print('---->   !! 不通过!!')
    exit(1)

wd.quit()



  • 用例 UI-0103
from selenium import webdriver
from time import sleep

wd = webdriver.Chrome()
wd.implicitly_wait(5)

wd.get('http://127.0.0.1/mgr/sign.html')

# 根据 ID 选择元素,并且输入字符串
wd.find_element_by_id('username').send_keys('byhy')
wd.find_element_by_id('password').send_keys('88888888')


# 根据标签名查找元素
wd.find_element_by_tag_name('button').click()


# 先找到上层节点,缩小查找范围
sidebarMenu = wd.find_element_by_class_name('sidebar-menu')

# 再找到内部元素
elements = sidebarMenu.find_elements_by_tag_name('span')

# 第一个span对应的菜单是 客户,点击它
elements[0].click()


# 点击添加客户按钮
wd.find_element_by_class_name('glyphicon-plus').click()

# form-contorl 对应3个输入框
inputs = wd.find_element_by_class_name('add-one-area')\
    .find_elements_by_class_name('form-control')

# 输入客户姓名
inputs[0].send_keys('南京中医院')
# 输入联系电话
inputs[1].send_keys('2551867858')
# 输入客户姓名
inputs[2].send_keys('江苏省-南京市-秦淮区-汉中路-16栋504')

# 第1个 btn-xs 就是创建按钮, 点击创建按钮
wd.find_element_by_class_name('add-one-area')\
    .find_element_by_class_name('btn-xs')\
    .click()

# 等待1秒
sleep(1)


# 找到第1个客户信息,点击编辑按钮
wd.find_element_by_class_name('search-result-item-actionbar')\
    .find_element_by_tag_name('label')\
    .click()



# 找到第1个输入框,对应的就是 客户名的编辑框
nameInput = wd.find_element_by_class_name('search-result-item')\
    .find_element_by_tag_name('input')

# 先清除掉原来的内容
nameInput.clear()

# 再输入新的客户名
nameInput.send_keys('南京省中医院')

# 点击确定按钮
wd.find_element_by_class_name('search-result-item-actionbar')\
    .find_element_by_tag_name('label')\
    .click()




# 找到 列表最上面的一栏
item = wd.find_elements_by_class_name('search-result-item')[0]

fields = item.find_elements_by_tag_name('span')[:6]

texts = [field.text for field in fields]
print(texts)

# 预期内容为
expected = [
'客户名:',
'南京省中医院',
'联系电话:',
'2551867858',
'地址:',
'江苏省-南京市-秦淮区-汉中路-16栋504'
]

print(f'\n** 检查点 **  客户信息和添加内容一致 ')

if texts==expected:
    print('---->  通过')
else:
    print('---->   !! 不通过!!')
    exit(1)

wd.quit()

补充练习

VIP学员请联系老师获取补充练习题