Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何断言复制到剪贴板的值是正确的?_Javascript_Selenium_Python Behave - Fatal编程技术网

Javascript 如何断言复制到剪贴板的值是正确的?

Javascript 如何断言复制到剪贴板的值是正确的?,javascript,selenium,python-behave,Javascript,Selenium,Python Behave,在我的步骤中,我单击一个自动复制电子邮件地址的按钮。我如何断言该值是我期望的值?我在想办法把它粘贴到终端上,这样我就能看到它在复制什么,但如果有更有效的方法,我很想知道 我尝试按照其他建议导入pyperclip,但导入不正确 这是单击时复制值的按钮 @step('I locate the email icon and click') def step_impl(context): window_before = driver.window_handles[0] context.c

在我的步骤中,我单击一个自动复制电子邮件地址的按钮。我如何断言该值是我期望的值?我在想办法把它粘贴到终端上,这样我就能看到它在复制什么,但如果有更有效的方法,我很想知道

我尝试按照其他建议导入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])

我希望它能提供我复制的电子邮件,但我尝试的每一步似乎都不起作用。

将剪贴板内容存储到一个变量中,并可以像往常一样断言它。 请尝试下面的代码,让我知道这是否有帮助

Python示例 输出:
将剪贴板内容存储到变量中,并可以像往常一样断言它。 请尝试下面的代码,让我知道这是否有帮助

Python示例 输出:
下面是一个如何进行测试的示例。 测试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>

下面是一个如何进行测试的示例。 测试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>

重新格式化您的问题,将文本放入代码标记中,将代码放入文本标记中从我对这个主题的研究中,大多数web浏览器将不再看到剪贴板或以编程方式粘贴它,由于这是一种安全风险,您可以将剪贴板写入文本文件,并将其与预期值进行比较。您还可以将剪贴板内容存储到变量中,并可以像往常一样进行断言。您可以验证包含内容(是否为电子邮件地址),也可以按包含文本进行搜索,如果返回值,你复制了文本重新格式化你的问题,你把文本放在代码中,代码放在文本中。根据我对这个主题的研究,大多数网络浏览器都不会再看到剪贴板或以编程方式粘贴它了,由于这是一种安全风险,您可以将剪贴板写入文本文件,并将其与预期值进行比较。您还可以将剪贴板内容存储到变量中,并可以像往常一样进行断言。您可以验证包含内容(是否为电子邮件地址),也可以按包含文本进行搜索,如果返回值,则复制文本
<!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])