Библиотека селена часто используется для автоматизации тестов пользовательского интерфейса и, вероятно, была разработана для нее, но сам селен не является библиотекой тестирования, и люди довольно часто забывают об этом
Selenium – это в основном набор инструментов, которые позволяют вашему коду взаимодействовать с браузером и элементами HTML.
Архитектура селена Webdriver состоит из четырех основных частей:
- Языковые привязки (библиотеки для каждого языка).
- Сервер селена.
- Водители браузера.
- Наконец, водители.
Играя с селенами
Селен не является супер быстрой обработкой, возможно, из -за многих компонентов, которые должны участвовать. Я провел забавный эксперимент, чтобы увидеть, насколько медленно действительно селен, путем снижения внешних зависимостей как минимум.
Для эксперимента я в основном выполняю клики по системе, в которой не проводится интернет -вызов на каждом щелчке, а также не происходит рендеринг HTML (или это не имеет большого значения).
Python и Open CV
Я использовал Python вместе с OpenCV, чтобы открыть изображение и создать список точек пикселей для каждого черного пикселя на данном изображении.
def generate_coordenates(): print('Generating coordinates based on image') image=cv2.imread('image2.png') black_coordinates = [] #initial position for i in range(image.shape[0]): for j in range(image.shape[1]): # find the black pixels if image[i,j,0]==0 and image[i,j,1]==0 and image[i,j,2]==0: black_coordinates.append((j,i)) print('Writing coordinates to file') # generate a coordinates file with open(COORDINATES_FILE, 'a') as out: for x, y in black_coordinates: out.write(f'{x},{y}\n') print('Finish generating coordinates file')
Селен и сайт, такой как MS Paint
Затем я использую Selenium, чтобы перейти на веб -сайт, такой как MSPAINT ( https://kleki.com/ ), и генерировать изображение на основе черных пикселей.
driver = webdriver.Chrome(DRIVER_LOCATION) with open(COORDINATES_FILE) as file: driver.get(DRAW_WEBSITE) driver.find_element_by_css_selector("html") # move to starting point actions = ActionChains(driver) actions.move_by_offset(STARTING_COORDINATES.get('x'), STARTING_COORDINATES.get('y')) # start painting for line in map(lambda line: line.rstrip('\n'), file): print('Creating move actions') xy = line.split(',') # split the x and y current = {'x': int(xy[0]), 'y': int(xy[1])} move_to = {'x': current.get('x') - before.get('x'), 'y': current.get('y') - before.get('y')} actions.move_by_offset(move_to.get('x'), move_to.get('y')) actions.click() before = current.copy() # finish painting actions.perform()
Процесс
Пара минут:
20 минут:
50 минут:
Результаты
Файл координат закончился 3777 рядов Анкет Потому что для каждой строки Selenium выполняет 2 действия: MOVE_BY_OFFSET
и Нажмите
это означает 7554 Действия селена были выполнены.
Тест взял 54,67 минута завершить, что означает вокруг 3280 секунд Анкет
И если мы сделаем математику: 7554/3280 = ~ 2,30 . Это означает, что 2,30 действия селена были выполнены в секунду.
Довольно весело …
Комментарии?
Ура:) и не забудьте продолжать использовать селен https://pjcalvo.github.com
Если вам понравился пост:
Оригинал: “https://dev.to/coffeestain/playing-around-with-selenium-and-opencv-27h”