Selenium 2 と Python バインディングを使用してコピー アンド ペーストを実行する方法はありますか?
コピーしたい要素を強調表示してから、次のアクションを実行します
copyActionChain.key_down(Keys.COMMAND).send_keys('C').key_up(Keys.COMMAND)
ただし、強調表示されたテキストはコピーされません。
Selenium 2 と Python バインディングを使用してコピー アンド ペーストを実行する方法はありますか?
コピーしたい要素を強調表示してから、次のアクションを実行します
copyActionChain.key_down(Keys.COMMAND).send_keys('C').key_up(Keys.COMMAND)
ただし、強調表示されたテキストはコピーされません。
実際にはかなり単純です:
from selenium.webdriver.common.keys import Keys
elem = find_element_by_name("our_element")
elem.send_keys("bar")
elem.send_keys(Keys.CONTROL, 'a') # highlight all in box
elem.send_keys(Keys.CONTROL, 'c') # copy
elem.send_keys(Keys.CONTROL, 'v') # paste
これはおそらく他のコマンドにも拡張できると思います。
実際のキーボード ショートカットを使用するのではなく、webdriver にテキストを取得させます。これを行うには、要素の内部テキストを見つけます。
WebElement element1 = wd.findElement(By.locatorType(locator));
String text = element1.getText();
このようにして、テスト プロジェクトは実際にテキストにアクセスできます。これは、ログを記録する場合や、テキストが伝えたいことを確実に伝える場合に役立ちます。
ここから要素のテキストを 1 つの文字列として操作できるため、貼り付け先の要素に何を入力するかを完全に制御できます。今ちょうど
element2.clear();
element2.sendKeys(text);
ここで、element2 はテキストを貼り付ける要素です
elem.send_keys(Keys.SHIFT, Keys.INSERT)
何かを貼り付けようとすると、macOS Catalina で正常に動作します。
現時点では OSX でこれを試すことはできませんが、FF と Ubuntu では確実に動作します。
import os
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
with open('test.html', 'w') as fp:
fp.write("""\
<html>
<body>
<form>
<input type="text" name="intext" value="ABC">
<br>
<input type="text" name="outtext">
</form>
</body>
</html>
""")
driver = webdriver.Firefox()
driver.get('file:///{}/test.html'.format(os.getcwd()))
element1 = driver.find_element_by_name('intext')
element2 = driver.find_element_by_name('outtext')
time.sleep(1)
element1.send_keys(Keys.CONTROL, 'a')
time.sleep(1)
element1.send_keys(Keys.CONTROL, 'c')
time.sleep(1)
element2.send_keys(Keys.CONTROL, 'v')
ステートメントは、ステップを確認できるようにするためのsleep()
ものであり、もちろん、プログラムが機能するために必要なものではありません。
ActionChainsend_key
は、選択した要素に切り替えて、send_keys
それに対して a を実行します。