Ruby 按Ctrl+;Selenium Web驱动程序中的一个应用程序
有没有办法使用SeleniumWebDriver按Ctrl+a键 我检查了Selenium库,发现Selenium只允许按特殊键和键。因为Ctrl+A映射到ASCII码值1(Ctrl+B到2,最多,Ctrl+Z到26) 尝试: 要单击Ctrl+A,可以通过操作来完成Ruby 按Ctrl+;Selenium Web驱动程序中的一个应用程序,ruby,selenium,selenium-webdriver,keypress,Ruby,Selenium,Selenium Webdriver,Keypress,有没有办法使用SeleniumWebDriver按Ctrl+a键 我检查了Selenium库,发现Selenium只允许按特殊键和键。因为Ctrl+A映射到ASCII码值1(Ctrl+B到2,最多,Ctrl+Z到26) 尝试: 要单击Ctrl+A,可以通过操作来完成 Actions action = new Actions(); action.keyDown(Keys.CONTROL).sendKeys(String.valueOf('\u0061')).perform(); \u0
Actions action = new Actions();
action.keyDown(Keys.CONTROL).sendKeys(String.valueOf('\u0061')).perform();
\u0061表示字符“a”
\u0041表示字符“A”
要按其他字符,请参阅unicode字符表-另一个解决方案(在Java中,因为您没有告诉我们您的语言-但它在所有具有键的语言中都以相同的方式工作):
String selectAll=Keys.chord(Keys.CONTROL,“a”);
driver.findElement(By.whatever(“任何”)).sendKeys(selectAll);
您可以使用它来选择
中的整个文本,或者选择整个页面上的整个文本(只需找到html
元素并将其发送给它即可)
对于使用Selenium Ruby绑定:
在Ruby绑定中没有chord()
方法。因此,正如Hari Reddy所建议的,您必须使用Selenium高级用户交互API,请参见:
driver.action.key\u向下(:控制)
.发送密钥(“a”)
.key_up(:控制)
表演
您可以尝试以下方法:
driver.findElement(By.xpath(id("anything")).sendKeys(Keys.CONTROL + "a");
此方法删除将unicode转换为字符串的额外调用(String.ValueOf())。在Selenium for C#中,发送键。Control
只需切换Control键的状态:如果它向上,则变为向下;如果它下降了,那么它就会上升。因此,要模拟按下Control+A,请发送键。Control
两次,一次在发送“A”之前,然后在发送“A”之后
例如,如果we是输入IWebElement,则以下语句将选择其所有内容:
we.SendKeys(Keys.Control+“a”+Keys.Control)代码>我发现在Ruby中,可以将两个参数传递给send\u key
像这样:
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();
通过在Java中使用Robot类:
导入java.awt.Robot;
导入java.awt.event.KeyEvent;
公共类Test1
{
公共静态void main(字符串[]args)引发异常
{
WebDriver d1=新的FirefoxDriver();
d1.导航()到(“https://www.youtube.com/");
睡眠(3000);
Robot rb=新机器人();
rb.keyPress(KeyEvent.VK_选项卡);
rb.keyRelease(KeyEvent.VK_选项卡);
rb.keyPress(KeyEvent.VK_选项卡);
rb.keyRelease(KeyEvent.VK_选项卡);
//执行[Ctrl+A]操作-它可以工作
rb.keyPress(KeyEvent.VK_控件);
rb.keyPress(KeyEvent.VK_A);
//按下后需要释放按键
rb.keyrease(KeyEvent.VK_A);
rb.keyRelease(KeyEvent.VK_控件);
睡眠(3000);
}
}
这就是我使用C#(Visual Studio 2015)和Selenium时的效果:
new Actions(driver).SendKeys(Keys.Control + "A").Perform();
您可以在中间使用(+)添加任意数量的键。Java
Robot类将比通过Selenium sendkeys发送密钥更有效。请尝试:
例如:
Robot rb = new Robot();
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_A);
要使用上述Robot类,您需要导入java.awt.Robot代码>。对于Python:
ActionChains(driver).key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).perform();
最简单的答案是C(如果你倾向于C)
这个答案几乎给出了,但我已经修复了他在一些关键字上出错的情况,添加了KeyUp,或者你陷入了一团混乱,没有按下控制键
我还添加了关于OpenQA.Selenium.Keys的说明,因为您可能也在使用Windows.Forms,在与我相同的类上,我需要这样的说明
最后,我键入“a”,因为我发现这是最简单的方法,而且我从OP中看不到他们不想要最简单答案的任何建议
非常感谢Hari Reddy,因为我是Actions类使用的新手,并且编写了许多不同的命令。用他展示的方式把它们连在一起会更快:-)我没能用语言来表达。我用红宝石配硒粉。但这对我不起作用。但我仍然无法在编辑器中复制所有文本。我在firefox 3.6或firefox 11上使用selenium 2.20。我使用selenium webdriver ruby gem,使用firefox驱动程序,但这不适用于chrome驱动程序。我也一样。在firefox中工作,但在chrome中不起作用。我相信ruby中你只需发送按键(:control,“a”)
即可。你可以从中得到答案:编程语言在中显示。别忘了输入控制键的keyUp,否则在将来的测试中会出现奇怪的错误。更完整的答案应该包括keyUp
。由于OP没有离开大楼,这应该是可能的(同时验证它是否真的工作)。你可以,谢谢。我一直在找这个,太好了。通过使用您的注释,在使用Rselenium的R lang中,我也得到了Control+A的结果。在本例中,我必须键入:page$sendKeysActiveElement(list(key='control','a',key='control'))
它也适用于Python和多个键(尽管Python中的函数名为snake-case-send_-keys
)。例如,对于Shift+Alt+Y:send_key(keys.Shift+keys.Alt+“Y”+keys.Shift+keys.Alt)
rb表示机器人?在哪里初始化rb?:)@csanez:是的,rb是Robot的实例。您可以将Robot初始化为:Robot rb=new Robot();谢谢,这帮助了我的python应用程序,使用了driver.send_keys(keys.TAB)
感谢您提供了这个代码片段,它可能会提供一些有限的、即时的帮助。A通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有其他类似问题的读者更有用。请在您的答案中添加一些解释,包括您所做的假设。通常,最好在答案中添加一些文本,以便更好地向提出问题的人解释:这不能保证他直接从代码中理解。使用keyDown()不是吗
Robot rb = new Robot();
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_A);
ActionChains(driver).key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).perform();
Actions action = new Actions();
action.KeyDown(OpenQA.Selenium.Keys.Control).SendKeys("a").KeyUp(OpenQA.Selenium.Keys.Control).perform();
Actions act = new Actions(driver);
act.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).build().perform();