1# coding=utf-8 2import time 3from selenium import webdriver 4from selenium.webdriver.common.action_chains import ActionChains 5from selenium.webdriver.support import expected_conditions as EC 6from selenium.webdriver.support.ui import WebDriverWait 7from selenium.webdriver.common.by import By 8from selenium.webdriver.support.select import Select 9 10 11class Pyse(object): 12 ''' 13 Pyse framework for the main class, the original 14 selenium provided by the method of the two packaging, 15 making it easier to use. 16 ''' 17 18 def __init__(self, browser='chrome'): 19 ''' 20 Run class initialization method, the default is proper 21 to drive the Firefox browser. Of course, you can also 22 pass parameter for other browser, Chrome browser for the "Chrome", 23 the Internet Explorer browser for "internet explorer" or "ie". 24 ''' 25 # if browser == "firefox" or browser == "ff": 26 # driver = webdriver.Firefox() 27 # elif browser == "chrome": 28 # option = webdriver.ChromeOptions() 29 # option.add_argument("--start-maximized") 30 # driver = webdriver.Chrome(chrome_options=option) 31 # elif browser == "internet explorer" or browser == "ie": 32 # driver = webdriver.Ie() 33 # elif browser == "opera": 34 # driver = webdriver.Opera() 35 # elif browser == "phantomjs": 36 # driver = webdriver.PhantomJS() 37 # elif browser == 'edge': 38 # driver = webdriver.Edge() 39 # try: 40 # self.driver = driver 41 # except Exception: 42 # raise NameError( 43 # "Not found %s browser,You can enter 'ie', 'ff', 'opera', 'phantomjs', 'edge' or 'chrome'." % browser) 44 45 if browser.lower() == 'chrome': 46 option = webdriver.ChromeOptions() 47 option.add_argument('--start-maximized') 48 driver = webdriver.Chrome(chrome_options=option) 49 elif browser.lower() == 'firefox' or browser.lower() == 'ff': 50 driver = webdriver.Firefox() 51 elif browser.lower() == 'ie' or browser.lower() == 'internet explorer': 52 driver = webdriver.Ie() 53 elif browser.lower() == 'opera': 54 driver = webdriver.Opera() 55 elif browser.lower() == 'phantomjs': 56 driver = webdriver.PhantomJS 57 elif browser.lower() == 'edge': 58 driver = webdriver.Edge() 59 try: 60 self.driver = driver 61 except Exception: 62 raise NameError( 63 "Not found %s browser,You can enter 'ie', 'ff', 'opera', 'phantomjs', 'edge' or 'chrome'." % browser) 64 65 def element_wait(self, css, secs=5): 66 ''' 67 Waiting for an element to display. 68 69 Usage: 70 driver.element_wait("css=>#el",10) 71 ''' 72 if "=>" not in css: 73 raise NameError("Positioning syntax errors, lack of '=>'.") 74 75 by = css.split("=>")[0] 76 value = css.split("=>")[1] 77 78 if by == "id": 79 WebDriverWait(self.driver, secs, 1).until(EC.presence_of_element_located((By.ID, value))) 80 elif by == "name": 81 WebDriverWait(self.driver, secs, 1).until(EC.presence_of_element_located((By.NAME, value))) 82 elif by == "class": 83 WebDriverWait(self.driver, secs, 1).until(EC.presence_of_element_located((By.CLASS_NAME, value))) 84 elif by == "link_text": 85 WebDriverWait(self.driver, secs, 1).until(EC.presence_of_element_located((By.LINK_TEXT, value))) 86 elif by == "xpath": 87 WebDriverWait(self.driver, secs, 1).until(EC.presence_of_element_located((By.XPATH, value))) 88 elif by == "css": 89 WebDriverWait(self.driver, secs, 1).until(EC.presence_of_element_located((By.CSS_SELECTOR, value))) 90 else: 91 raise NameError( 92 "Please enter the correct targeting elements,'id','name','class','link_text','xpath','css'.") 93 94 def get_element(self, css): 95 ''' 96 Judge element positioning way, and returns the element. 97 ''' 98 if "=>" not in css: 99 raise NameError("Positioning syntax errors, lack of '=>'.") 100 101 by = css.split("=>")[0] 102 value = css.split("=>")[1] 103 104 if by == "id": 105 element = self.driver.find_element_by_id(value) 106 elif by == "name": 107 element = self.driver.find_element_by_name(value) 108 elif by == "class": 109 element = self.driver.find_element_by_class_name(value) 110 elif by == "link_text": 111 element = self.driver.find_element_by_link_text(value) 112 elif by == "xpath": 113 element = self.driver.find_element_by_xpath(value) 114 elif by == "css": 115 element = self.driver.find_element_by_css_selector(value) 116 else: 117 raise NameError( 118 "Please enter the correct targeting elements,'id','name','class','link_text','xpath','css'.") 119 return element 120 121 def get(self, url): 122 ''' 123 open 请求url. 124 125 Usage: 126 driver.open("https://www.baidu.com") 127 ''' 128 self.driver.get(url) 129 130 def max_window(self): 131 ''' 132 Set browser window maximized. 133 134 Usage: 135 driver.max_window() 136 ''' 137 self.driver.maximize_window() 138 139 def set_window(self, wide, high): 140 ''' 141 Set browser window wide and high. 142 143 Usage: 144 driver.set_window(wide,high) 145 ''' 146 self.driver.set_window_size(wide, high) 147 148 def type(self, css, text): 149 ''' 150 Operation input box 发送value 151 152 Usage: 153 driver.type("css=>#el","selenium") 154 ''' 155 self.element_wait(css) 156 el = self.get_element(css) 157 el.send_keys(text) 158 159 def clear(self, css): 160 ''' 161 Clear the contents of the input box. 162 163 Usage: 164 driver.clear("css=>#el") 165 ''' 166 self.element_wait(css) 167 el = self.get_element(css) 168 el.clear() 169 170 def click(self, css): 171 ''' 172 It can click any text / image can be clicked 173 Connection, check box, radio buttons, and even drop-down box etc.. 174 175 Usage: 176 driver.click("css=>#el") 177 ''' 178 self.element_wait(css) 179 el = self.get_element(css) 180 el.click() 181 182 def right_click(self, css): 183 ''' 184 Right click element. 185 186 Usage: 187 driver.right_click("css=>#el") 188 ''' 189 self.element_wait(css) 190 el = self.get_element(css) 191 ActionChains(self.driver).context_click(el).perform() 192 193 def move_to_element(self, css): 194 ''' 195 Mouse over the element. 196 197 Usage: 198 driver.move_to_element("css=>#el") 199 ''' 200 self.element_wait(css) 201 el = self.get_element(css) 202 ActionChains(self.driver).move_to_element(el).perform() 203 204 def double_click(self, css): 205 ''' 206 Double click element. 207 208 Usage: 209 driver.double_click("css=>#el") 210 ''' 211 self.element_wait(css) 212 el = self.get_element(css) 213 ActionChains(self.driver).double_click(el).perform() 214 215 def drag_and_drop(self, el_css, ta_css): 216 ''' 217 Drags an element a certain distance and then drops it. 218 219 Usage: 220 driver.drag_and_drop("css=>#el","css=>#ta") 221 ''' 222 self.element_wait(el_css) 223 element = self.get_element(el_css) 224 self.element_wait(ta_css) 225 target = self.get_element(ta_css) 226 ActionChains(self.driver).drag_and_drop(element, target).perform() 227 228 def click_text(self, text): 229 ''' 230 Click the element by the link text 231 232 Usage: 233 driver.click_text("新闻") 234 ''' 235 self.driver.find_element_by_partial_link_text(text).click() 236 237 def close(self): 238 ''' 239 Simulates the user clicking the "close" button in the titlebar of a popup 240 window or tab. 241 242 Usage: 243 driver.close() 244 ''' 245 self.driver.close() 246 247 def quit(self): 248 ''' 249 Quit the driver and close all the windows. 250 251 Usage: 252 driver.quit() 253 ''' 254 self.driver.quit() 255 256 def submit(self, css): 257 ''' 258 Submit the specified form. 259 260 Usage: 261 driver.submit("css=>#el") 262 ''' 263 self.element_wait(css) 264 el = self.get_element(css) 265 el.submit() 266 267 def F5(self): 268 ''' 269 Refresh the current page. 270 271 Usage: 272 driver.F5() 273 ''' 274 self.driver.refresh() 275 276 def back(self): 277 self.driver.back() 278 279 def go_on(self): 280 self.driver.forward() 281 282 def js(self, script): 283 ''' 284 Execute JavaScript scripts. 285 286 Usage: 287 driver.js("window.scrollTo(200,1000);") 288 ''' 289 self.driver.execute_script(script) 290 291 def get_attribute(self, css, attribute): 292 ''' 293 Gets the value of an element attribute. 294 295 Usage: 296 driver.get_attribute("css=>#el","type") 297 ''' 298 el = self.get_element(css) 299 return el.get_attribute(attribute) 300 301 def get_text(self, css): 302 ''' 303 Get element text information. 304 305 Usage: 306 driver.get_text("css=>#el") 307 ''' 308 self.element_wait(css) 309 el = self.get_element(css) 310 return el.text 311 312 def get_display(self, css): 313 ''' 314 Gets the element to display,The return result is true or false. 315 316 Usage: 317 driver.get_display("css=>#el") 318 ''' 319 self.element_wait(css) 320 el = self.get_element(css) 321 return el.is_displayed() 322 323 def get_title(self): 324 ''' 325 Get window title. 326 327 Usage: 328 driver.get_title() 329 ''' 330 return self.driver.title 331 332 def get_url(self): 333 ''' 334 Get the URL address of the current page. 335 336 Usage: 337 driver.get_url() 338 ''' 339 return self.driver.current_url 340 341 def get_windows_img(self, file_path): 342 ''' 343 Get the current window screenshot. 344 345 Usage: 346 driver.get_windows_img() 347 ''' 348 self.driver.get_screenshot_as_file(file_path) 349 350 def wait(self, secs): 351 ''' 352 Implicitly wait.All elements on the page. 353 354 Usage: 355 driver.wait(10) 356 ''' 357 self.driver.implicitly_wait(secs) 358 359 def accept_alert(self): 360 ''' 361 Accept warning box. 362 363 Usage: 364 driver.accept_alert() 365 ''' 366 self.driver.switch_to.alert.accept() 367 368 def dismiss_alert(self): 369 ''' 370 Dismisses the alert available. 371 372 Usage: 373 driver.dismiss_alert() 374 ''' 375 self.driver.switch_to.alert.dismiss() 376 377 def switch_to_frame(self, css): 378 ''' 379 Switch to the specified frame. 380 381 Usage: 382 driver.switch_to_frame("css=>#el") 383 ''' 384 self.element_wait(css) 385 iframe_el = self.get_element(css) 386 self.driver.switch_to.frame(iframe_el) 387 388 def parent_iframe(self): 389 self.driver.switch_to.parent_frame() 390 391 def switch_to_frame_out(self): 392 ''' 393 Returns the current form machine form at the next higher level. 394 Corresponding relationship with switch_to_frame () method. 395 396 Usage:跳转到最外层的页面 397 driver.switch_to_frame_out() 398 ''' 399 self.driver.switch_to.default_content() 400 401 def open_new_window(self, css): 402 ''' 403 Open the new window and switch the handle to the newly opened window. 404 405 Usage: 406 driver.open_new_window() 407 ''' 408 original_windows = self.driver.current_window_handle 409 el = self.get_element(css) 410 el.click() 411 all_handles = self.driver.window_handles 412 for handle in all_handles: 413 if handle != original_windows: 414 self.driver.switch_to.window(handle) 415 416 # def _save_png(self, name): 417 # self.get_windows_img(name) 418 419 def wait_and_save_exception(self, css, name): 420 try: 421 self.element_wait(css, secs=5) 422 return True 423 except Exception as e: 424 from lib.core.path import PICTUREPATH 425 self.get_windows_img(PICTUREPATH + name + '.jpg') 426 return False 427 428 def wait_and_exception(self, css): 429 try: 430 self.element_wait(css, secs=10) 431 return True 432 except Exception as e: 433 return False 434 435 def select_by_value(self, css, value): 436 self.element_wait(css) 437 el = self.get_element(css) 438 Select(el).select_by_value(value) 439 440 441 442 443if __name__ == '__main__': 444 pyse = Pyse('Chrome') 445 pyse.get("http://") 446 pyse.get_element('css=>#i1').send_keys(111111) 447 time.sleep(3) 448 pyse.quit()
UI自动化
Wesley13
2021-10-11
1317 0 0
点赞
收藏
评论区
加载中...