阳洁
2023-07-18 5f1ad21111b4344a9e55125720d159dd6b949373
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
 
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
 
 
class BasePage:
    # 初始化方法
    def __init__(self, driver):
        self.driver = driver
 
    # 元素定位
    def get_element(self, locator):
        return self.driver.find_element(*locator)
 
    # 多个元素定位
    def get_elements(self, locator):
        return self.driver.find_elements(*locator)
 
    # 多个元素定位
    def get_elements_wait(self, locator):
        wait = WebDriverWait(self.driver, 10, 0.5)
        wait.until(EC.presence_of_element_located(locator))
        return self.driver.find_elements(*locator)
 
    # 在指定元素中定位元素
    def get_element_in(self, element, locator):
        return element.find_element(*locator)
 
    # 在指定元素中定位多个元素
    def get_elements_in(self, element, *locator):
        return element.find_elements(*locator)
 
    # 元素定位
    def get_element_wait(self, locator):
        wait = WebDriverWait(self.driver, 10, 0.5)
        wait.until(EC.presence_of_element_located(locator))
        return self.driver.find_element(*locator)
 
    # 使用js语句点击
    def click_js(self, *locator):
        item = self.get_element(*locator)
        self.driver.execute_script("arguments[0].click();", item)
 
    def click_js_wait(self, *locator):
        item = self.get_element_wait(*locator)
        self.driver.execute_script("arguments[0].click();", item)
 
    def click_element_js(self, element):
        """
        使用js点击元素
        :param element: 要点击的元素
        :return:
        """
        self.driver.execute_script("arguments[0].click();", element)
 
    # 点击
    def click(self, locator):
        """
        点击元素
        :param locator: 元素定位
        :return:
        """
        self.get_element(locator).click()
 
    def click_wait(self, *locator):
        self.get_element_wait(*locator).click()
 
    # 输入
    def send_text(self, text, locator):
        """
        输入内容
        :param text: 内容
        :param locator: 元素定位
        :return:
        """
        self.get_element(locator).send_keys(text)
 
    def send_text_wait(self, text, *locator):
        self.get_element_wait(*locator).send_keys(text)
 
    # JavaScript获取元素值
    def get_input_value_js(self, locator):
        input_box = self.get_element(locator)
        input_value = self.driver.execute_script("return arguments[0].value", input_box)
        return input_value
 
    def get_input_value_js_wait(self, *locator):
        input_box = self.get_element_wait(*locator)
        input_value = self.driver.execute_script("return arguments[0].value", input_box)
        return input_value
 
    # 清除
    def clear_text(self, *locator):
        self.get_element(*locator).clear()
 
    def clear_text_wait(self, *locator):
        self.get_element_wait(*locator).clear()
 
    # 表单切换
    def switch_iframe(self, locator):
        self.driver.switch_to.frame(self.get_element(locator))
 
    # 切换到上一层的iframe
    def switch_parent_iframe(self):
        self.driver.switch_to.parent_frame()
 
    def switch_iframe_wait(self, locator):
        self.driver.switch_to.frame(self.get_element_wait(locator))
 
    # 窗口切换
    def switch_window(self, n):
        self.driver.switch_to.window(self.driver.window_handles[n])
 
    # 检查元素是否可见可点击
    def check_clickable(self, *locator):
        wait = WebDriverWait(self.driver, 10, 0.5)
        try:
            e = wait.until(EC.element_to_be_clickable(locator))
            if e is not None:
                return True
        except:
            pass
        return False
 
    # 等待元素出现
    def wait_appear(self, *locator):
        wait = WebDriverWait(self.driver, 10, 0.5)
        try:
            e = wait.until(EC.presence_of_element_located(locator))
            if e is not None:
                return True
        except:
            pass
        return False
 
    # 滑动页面
    def scroll_by(self, num):
        self.driver.execute_script("window.scrollBy(0, " + num + ");")
 
    # 滑动到底部
    def scroll_to_bottom(self):
        self.driver.execute_script("window.scrollBy(0,document.body.scrollHeight);")
 
    # 滑动到顶部
    def scroll_to_top(self):
        self.driver.execute_script("window.scrollBy(0,0);")
 
    # 截取当前窗口保存为图片
    def get_png(self):
        """截取当前窗口保存为图片"""
        return self.driver.get_screenshot_as_png()
 
    def open_new_table_to_url(self, url):
        """
        打开一个新的标签页,并跳转到指定的url
        :return:
        """
        # 打开新标签页
        self.driver.execute_script("window.open()")
        # 切换到新的标签页
        self.switch_window(-1)
        # 在新标签页中加载指定url
        self.driver.get(url)
 
    def elements_is_visibility(self, locator):
        """
        判断是否至少有一个元素在页面中可见
        :param locator:
        :return:
        """
        wait = WebDriverWait(self.driver, 10, 0.5)
        return wait.until(EC.visibility_of_any_elements_located(locator))