Как я могу утверждать, что значение, скопированное в буфер обмена, было правильным? - PullRequest
0 голосов
/ 07 октября 2019

На моих шагах я нажимаю кнопку, которая автоматически копирует адрес электронной почты. Как я могу утверждать, что ценность - это то, что я ожидаю? Пытался найти способ вставить его в терминал, чтобы я мог видеть, что он копирует, но если есть более эффективный способ сделать это, я хотел бы знать.

Я попытался импортировать pyperclip в соответствии с некоторыми другими рекомендациями. но это не правильно импортировать.

это кнопка, которая копирует значение при клике,

@step('I locate the email icon and click')
def step_impl(context):
    window_before = driver.window_handles[0]
    context.current_element = context.wait.until(
        EC.element_to_be_clickable(
            (EMAIL_ICON)
        )
    )
    scroll_to_webelement(context.driver, context.current_element)
    time.sleep(3)
    context.current_element.click()

запускает электронную почту по умолчанию вашей операционной системы, чтобы открыть второе окно, поэтому закрывается

@step('I switch to the new window and close it')
def step_impl(context):
    context.wait.until(EC.number_of_windows_to_be(2))
    context.driver.switch_to.window(context.driver.window_handles[-1])
    context.driver.close()
    context.driver.switch_to.window(context.driver.window_handles[0])

Я ожидаю, что он выдаст скопированное письмо, но, похоже, каждый мой шаг не работает.

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Вот пример, как вы можете проверить. Тестовый HTML:

<!DOCTYPE html>
<html>
<body>
<input type="text" value="my@email.com" id="mm">
<button onclick="myFunction()">Copy text</button>
<script>
    function myFunction() {
        var copyText = document.getElementById("mm");
        copyText.select();
        copyText.setSelectionRange(0, 99999)
        document.execCommand("copy");
        window.open();
    }
</script>
</body>
</html>

Тестовый код:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 5)
driver.get("file:///Users/***/Desktop/test.html")

# store input value
email = wait.until(ec.visibility_of_element_located((By.TAG_NAME, "input"))).get_attribute("value")
# click on button, that will copy value and open new tab
driver.find_element_by_tag_name("button").click()

# wait for the second window and switch to
wait.until(ec.number_of_windows_to_be(2))
driver.switch_to.window(driver.window_handles[-1])

# open google.com to check copied text
driver.get("https://www.google.com/")

google_q = driver.find_element_by_name("q")
# paste text to the google search input, SHIFT and INSERT keys for MacOS
google_q.send_keys(Keys.SHIFT, Keys.INSERT)
# assert copied value with stored
assert google_q.get_attribute("value") == email
# close current window and switch back to the first one
driver.close()
driver.switch_to.window(driver.window_handles[0])
0 голосов
/ 07 октября 2019

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

Пример Python

import xerox
from selenium import webdriver

driver = webdriver.Chrome('/usr/local/bin/chromedriver')  
driver.implicitly_wait(15)

driver.get("https://clipboardjs.com/")
driver.find_element_by_xpath("//img[@alt='Copy to clipboard']").click() #clip board content copied here
i = xerox.paste() #clip board content stored into variable i
print i
print i == "npm install clipboard --save" #compare the clip board content against the expected value
driver.quit()

Вывод:

npm install clipboard --save
True 
...