Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Random-ный email для ввода в текстовое поле

selenium
python
webdriver
Теги: #<Tag:0x00007fedbb043f48> #<Tag:0x00007fedbb043e08> #<Tag:0x00007fedbb043cc8>

(Olexander Davis) #1

Привет.

Идея простая: не знаю можно ли это реализовать.
Есть текстовое поле, в которое каждый раз нужно вводить разные\рандомные значения
В python можно через массив, в selenium смотрел, есть функция random
Но как лучше сделать не знаю.

Selenium, pytest + Python

Вот простой пример, где это нужно реализовать:

def search_with_magnifying_glass(self):
     time.sleep(1)
     self.driver.find_element_by_css_selector(".homePage__closed-arrow___2HRFM").click() #dropdown
     self.driver.find_element_by_xpath(".//*[@id='react-select-2--option-6']").click() #value from dropdown
     self.driver.find_element_by_xpath(".//*[@id='root']/div/div[2]/div/form/div[1]/div[2]/input").send_keys("Los") #value
     self.driver.find_element_by_xpath("//button[@type='submit']").click() #submit
     self.driver.implicitly_wait(5)

Спасибо.


#2

есть библиотека faker для python.
но я бы использовал реальный емеил gmail - куда через + дописывал бы какие то значения.
A потом проверять через апи - или пришел емеил + его можно провалидировать.


(Bolatbek) #3

Тут хотят проверять как понимаю и не валидные адреса.


(Che Xaker) #4
import random
# ....
def Generate_User(user, out="account"):
    chache = [1,2,3,4,5,6,7,8,9,0]*10
    random.shuffle(chache)
    buf    = ""
    for i in range(0, 10):
        buf += str(chache.pop())
    # ....
    user.email        = "alexpro" + buf + "@yopmail.com"
    # ....
    with open(out, "a") as file:
        file.write(user.email + "\n")
        file.close()

Кусочек кастомной функции для генерации юзера + email на почтовом сервисе не требующий регистрации, рандом чисел через список (масив) и сохранение email в файл


(Olexander Davis) #5

Спасибо, сделал, все круто, для даного тестирования подойдет и фейковый имелй, но интересно как сделать второй вариант, что вы описали: если не сложно хотя бы в общих чертах ибо еще не силен в этом


(Olexander Davis) #6

Спасибо, выглядит классно, но немного сложно еще реализовать такое, пока не дорос, но попрактикую в любом случае


#7

@Alexander_Tunick
суть в том что бы настроить для своего gmail аккаунта доступ по api . получается что ты выполняешь на selenium какие то действия (например - регистрация емейла ), а потом заходишь на свой gmail и смотришь что письмо пришло и что в нем есть нужные атрибуты.

вот старые куски кода которые не совсем ООП ) но в свое время работали :wink:

берем последнее письмо 

def get_last_email(user_email, email_password):
    mail = imaplib.IMAP4_SSL('imap.gmail.com')
    mail.login(user_email, email_password)
    mail.list()
    # Out: list of "folders" aka labels in gmail.
    mail.select("inbox")  # connect to inbox.
    result, data = mail.search(None, "ALL")
    ids = data[0]  # data is a list.
    id_list = ids.split()  # ids is a space separated string
    latest_email_id = id_list[-1]  # get the latest
    result, data = mail.fetch(latest_email_id, "(RFC822)")  # fetch the email body (RFC822) for the given ID
    raw_email = data[0][1]  # here's the body, which is raw text of the whole email
    # including headers and alternate payloads
    convert_email_to_text = email.message_from_string(raw_email)
    a = convert_email_to_text.get_payload()
    return len(str(a)), str(a)
после тестов я всегда удалял письма

def delete_all_email(user_email, email_password):
    mail = imaplib.IMAP4_SSL('imap.gmail.com')
    mail.login(user_email, email_password)
    mail.list()
    # Out: list of "folders" aka labels in gmail.
    mail.select("inbox")  # connect to inbox.
    typ, data = mail.search(None, 'ALL')
    for num in data[0].split():
        mail.store(num, '+FLAGS', '\\Deleted')
    mail.expunge()

P.S. часть этого кода я когда-то где-то нашел )))


(Olexander Davis) #8

Круть, спасибо!)


(Che Xaker) #9

Если тебе нужно вводить рандомные (уникальные) данные в поле чтобы пройти по тесту дальше и они не требуют верификации но нужна валидация формата строки “name@server.any” в форме то генеришь рандом строку + "@gmail.com" и вперед! ))

import random
# ....
def GenKey():
    array = [chr(i) for i in range(65, 91)]
    # список array = ['A', 'B', 'C' ... 'Z']
    random.shuffle(array)
    key = ""
    for i in range(5): # length of key
        key += array.pop()
    return key
# ....
browser = webdriver.Chrome()
# ....
    while True:
        element = browser.find_element_by_name("device_id")
        element.clear()
        # GenKey() возвращает что то типа JDUHW
        # можешь склеить и прибавить @gmail.com
        # и получишь JDUHW@gmail.com
        element.send_keys(GenKey())
        element.send_keys(Keys.ENTER)
        formDisplay(browser)

(Olexander Davis) #10

О спасибо, это метод, который я смотрел сначала, тоже пригодиться, спасибо большое :slightly_smiling_face: