1

我有一个功能可以验证复制到剪贴板的数据

def verify_copied_transcript_data(self):
    selector = '//input[@type="text" and @name="topic"]'
    topic_field = self.wait_for_element_by_xpath(selector)
    topic_field.clear()
    topic_field.send_keys('')
    topic_field.send_keys(Keys.COMMAND, 'v')
    topic_field_value = topic_field.get_attribute('value')
    self.assertTrue(len(topic_field_value) > 0)

我已经验证手动 CMD + v 确实将复制的文本粘贴到 topic_field 上。知道为什么硒不会模拟topic_field.send_keys(Keys.COMMAND, 'v')

复制文本的功能是:

def click_copy_transcript(self):
    selector = '//div[@id="closeChatModal"]//span[contains(text(), "Copy All")]'
    self.wait_for_element_by_xpath(selector).click()

这会复制剪贴板上的文本

4

3 回答 3

2

这个怎么样:

ActionChains(driver).key_down(u'\ue03d').key_down('v').perform()

甚至:

ActionChains(driver).key_down(u'\ue03d').send_keys('v').perform()

我已经在 PC 上使用 Control 键而不是 Command(显然!)对其进行了检查,并且两者都可以工作。

PS。也许首先您可能需要模拟单击要粘贴缓冲区的字段。

于 2018-07-13T14:15:55.963 回答
0

正如您提到的,以下代码将文本复制到剪贴板

def click_copy_transcript(self):
    selector = '//div[@id="closeChatModal"]//span[contains(text(), "Copy All")]'
    self.wait_for_element_by_xpath(selector).click()

现在,要从剪贴板复制文本,您可以使用以下paste()方法Pyperclip – A cross-platform clipboard module for Python

import pyperclip

def click_copy_transcript(self):
    selector = '//div[@id="closeChatModal"]//span[contains(text(), "Copy All")]'
    self.wait_for_element_by_xpath(selector).click()
    topic_field.send_keys(pyperclip.paste())

注意:根据adam-p/cb.py它被提及为:

将文本复制到剪贴板的 Python 函数(目前仅支持 Windows)。

于 2018-07-16T13:29:31.353 回答
0

尝试这个:

topic_field.send_keys(Keys.COMMAND + 'v')

完整的代码是:

def verify_copied_transcript_data(self):
    selector = '//input[@type="text" and @name="topic"]'
    topic_field = self.wait_for_element_by_xpath(selector)
    topic_field.clear()
    topic_field.send_keys('')
    topic_field.send_keys(Keys.COMMAND + 'v')
    topic_field_value = topic_field.get_attribute('value')
    self.assertTrue(len(topic_field_value) > 0)

您也可以尝试使用 ActionChains:

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

ActionChains(driver) \
    .key_down(Keys.COMMAND) \
    .key_down('v') \
    .key_up('v') \
    .key_up(Keys.COMMAND) \
    .perform()
于 2018-07-13T11:07:41.960 回答