运行硒时如何在Mac上从剪贴板粘贴文本-Python

时间:2018-07-13 11:04:27

标签: python python-3.x selenium selenium-webdriver pyperclip

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

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()

这会将文本复制到剪贴板上

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

如何?

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

甚至:

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

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

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

答案 2 :(得分: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)。