抽取find_element
1.抽取find_element的原因
我们发现查找元素都是使用的是find_element_by_xxx()这一类的方法,我们通过查看源码可知道,此类方法都是调用的额find_element()函数, 所以我们可以使用此实现方法.
但是,我们只是换了一种实现方法而已,我们可以在此基础上进一步抽取出find_element()的通用方法, 对于要查找的具体方法我们可以调用通用方法实现.
*find_element_by_id的源码
def find_element_by_id(self, id_):
"""Finds an element by id.
:Args:
- id\_ - The id of the element to be found.
:Returns:
- WebElement - the element if it was found
:Raises:
- NoSuchElementException - if the element wasn't found
:Usage:
element = driver.find_element_by_id('foo')
"""
return self.find_element(by=By.ID, value=id_)
def find_elements_by_id(self, id_):
"""
Finds multiple elements by id.
:Args:
- id\_ - The id of the elements to be found.
:Returns:
- list of WebElement - a list with elements if any was found. An
empty list if not
:Usage:
elements = driver.find_elements_by_id('foo')
"""
return self.find_elements(by=By.ID, value=id_)
2. 抽取后的目录
- base
- - __init__.py
- - base_action.py
- - base_driver.py
- page
- - sms_page.py
- script
- - test_sms_send.py
- pytest.ini
3. 代码
base_action.py
class BaseAction:
def __init__(self, driver):
self.driver = driver
def find_element(self, loc):
"""抽取查找元素的基本动作"""
return self.driver.find_element(loc[0], loc[1])
注意事项: 假如find_element找不到相应的元素,我们可以添加等待时间,让操作变的慢一些,这样更能模拟人的行为操作
在init.py中增加代码
"""
2. 测试发送短信功能
"""
sms_add = (By.ID, "com.android.mms:id/action_compose_new")
sms_receiver_phone_number = (By.ID, "com.android.mms:id/recipients_editor")
sms_sender_edit_content = (By.ID, "com.android.mms:id/embedded_text_editor")
sms_sender_button = (By.ID, "com.android.mms:id/send_button_sms")
更改sms_page.py 中关于查找元素部分的代码
import os
import sys
sys.path.append(os.getcwd())
import base
from base.base_action import BaseAction
class SmsPage(BaseAction):
def __init__(self, driver):
# self.driver = driver
# 调用父类的初始化方法
BaseAction.__init__(self, driver)
def click_add_sms(self):
# 2. 定位到新增
self.find_element(base.sms_add)
# self.driver.find_element(base.sms_add[0], base.sms_add[1]).click()
# self.driver.find_element_by_id("com.android.mms:id/action_compose_new").click()
def input_phone_number(self):
'''定位接受者,填写手机号'''
# 3.定位接收者元素
receive_number = self.find_element(base.sms_receiver_phone_number)
# receive_number = self.driver.find_element(base.sms_receiver_phone_number[0], base.sms_receiver_phone_number[1])
# receive_number = self.driver.find_element_by_id("com.android.mms:id/recipients_editor")
# 4.涉及到输入框的先clear 在输入
receive_number.clear()
receive_number.send_keys("17611111111")
def send_sms(self):
'''发送短信内容'''
send_list = [11, 'aaa', 'bbbb']
# 5.定位到发送元素
send_sms = self.find_element(base.sms_sender_edit_content)
# send_sms = self.driver.find_element(base.sms_sender_edit_content[0], base.sms_sender_edit_content[1])
# send_sms = self.driver.find_element_by_id("com.android.mms:id/embedded_text_editor")
send_btn = self.find_element(base.sms_sender_button)
# send_btn = self.driver.find_element(base.sms_sender_button[0], base.sms_sender_button[1])
# send_btn = self.driver.find_element_by_id("com.android.mms:id/send_button_sms")
# 6.遍历发送的信息
for i in send_list:
send_sms.clear()
send_sms.send_keys(i)
send_btn.click()