按(Ctrl + A)Selenium WebDriver
我需要使用Selenium WebDriver按Ctrl + A键。 有没有办法做到这一点? 我检查了Selenium库,发现Selenium只允许按下特殊键和function键。
还有一个解决scheme(在Java中,因为你没有告诉我们你的语言 – 但是在Keys
类的所有语言中都是这样的):
String selectAll = Keys.chord(Keys.CONTROL, "a"); driver.findElement(By.whatever("anything")).sendKeys(selectAll);
你可以用它来在<input>
或整个页面上select整个文本(只要findhtml
元素并发送给它)。
编辑 – OP后表示,他使用Selenium Ruby绑定
在Ruby绑定的Keys
类中没有chord()
方法。 因此,正如Hari Reddy所build议的那样,您将不得不使用Selenium高级用户交互API,请参阅ActionBuilder
:
driver.action.key_down(:control) .send_keys("a") .key_up(:control) .perform
要点击Ctrl + A ,你可以用Actions来完成
Actions action = new Actions(); action.keyDown(Keys.CONTROL).sendKeys(String.valueOf('\u0061')).perform();
\ u0061表示字符'a'
\ u0041代表人物“A”
要按其他字符,请参考unicode字符表 – charts/PDF/U0000.pdf
在Selenium for C#中,发送Keys.Control
只需切换控制键的状态:如果启动,则变为closures; 如果它下来,那就变成了 所以要模拟按Ctrl + A ,发送Keys.Control
两次,在发送“a”之前,然后之后。
例如,如果我们是一个inputIWebElement,下面的语句将select它的所有内容:
we.SendKeys(Keys.Control + "a" + Keys.Control);
你可以试试这个:
driver.findElement(By.xpath(id("anything")).sendKeys(Keys.CONTROL + "a");
由于Ctrl + A映射到ASCII代码值1( Ctrl + B为2,最多为, Ctrl + Z为26)。
尝试:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using OpenQA.Selenium; using OpenQA.Selenium.IE; using OpenQA.Selenium.Support.UI; using OpenQA.Selenium.Interactions; using OpenQA.Selenium.Internal; using OpenQA.Selenium.Remote; namespace SeleniumHqTest { class Test { IWebDriver driver = new InternetExplorerDriver(); driver.Navigate().GoToUrl("http://localhost"); IWebElement el = driver.FindElement(By.Id("an_element_id")); char c = '\u0001'; // ASCII code 1 for Ctrl-A el.SendKeys(Convert.ToString(c)); driver.Quit(); } }
WebDriver driver = new FirefoxDriver(); Actions action = new Actions(driver); action.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).perform();
此方法删除额外的调用(String.ValueOf())将unicode转换为string。
我发现在ruby中,你可以传递两个参数给send_keys
喜欢这个:
element.send_keys(:control, 'A')
这个对我有用:
OpenQA.Selenium.Interactions.Actions action = new OpenQA.Selenium.Interactions.Actions(browser); action.KeyDown(OpenQA.Selenium.Keys.Control) .SendKeys("a").KeyUp(OpenQA.Selenium.Keys.Control).Perform();
这对于我在Selenium中使用C#(VS2015)
new Actions(driver).SendKeys(Keys.Control+"A").Perform();
您可以使用(+)添加尽可能多的按键。
在Java中使用Robot类:
import java.awt.Robot; import java.awt.event.KeyEvent; public class Test1 { public static void main(String[] args) throws Exception { WebDriver d1 = new FirefoxDriver(); d1.navigate().to("https://www.youtube.com/"); Thread.sleep(3000); rb.keyPress(KeyEvent.VK_TAB); rb.keyRelease(KeyEvent.VK_TAB); rb.keyPress(KeyEvent.VK_TAB); rb.keyRelease(KeyEvent.VK_TAB); // Perform [Ctrl+A] Operation - it works rb.keyPress(KeyEvent.VK_CONTROL); rb.keyPress(KeyEvent.VK_A); Thread.sleep(3000); } }
java的
Robot类将比通过selenium sendkeys发送密钥的效率更高。 请尝试
例如:
Robot rb = new Robot(); rb.keyPress(KeyEvent.VK_CONTROL); rb.keyPress(KeyEvent.VK_A);
要使用上面的机器人类,您需要import java.awt.Robot;
“