正确的方式来使用Java在Selenium WebDriver中集中一个元素

WebDriver的selenium.focus()相当于什么?

 element.sendKeys(""); 

要么

 new Actions(driver).moveToElement(element).perform(); 

我已经尝试了他们两个,他们工作,但哪一个总是会在所有元素上工作?

哪一个是任何元素(如button,链接等)的正确方法? 这对我来说很重要,因为这个函数将在不同的用户界面上使用。

以下代码 –

element.sendKeys("");

试图find一个input标签框来input一些信息,而

new Actions(driver).moveToElement(element).perform();

是更合适的,因为它将适用于图像元素,链接元素,下拉框等。

因此,使用moveToElement()方法更有意义,可以专注于网页上的任何通用WebElement。

对于input框,您将不得不单击()元素来进行对焦。

new Actions(driver).moveToElement(element).click().perform();

而对于链接和图像,鼠标将在特定的元素上,你可以决定点击(),这取决于你想要做什么。

如果input标签上的click()不起作用 –

既然你想这个函数是通用的,你首先检查webElement是否是一个input标签或不 –

 if("input".equals(element.getTagName()){ element.sendKeys(""); } else{ new Actions(driver).moveToElement(element).perform(); } 

您可以根据自己的喜好进行类似的更改。

你可以使用JS如下:

 WebDriver driver = new FirefoxDriver(); JavascriptExecutor jse = (JavascriptExecutor) driver; jse.executeScript("document.getElementById('elementid').focus();"); 

FWIW,我有我认为是一个相关的问题,并提出了一个解决方法:我写了一个Chrome扩展,做一个document.execCommand('贴')到一个textarea焦点窗口卸载,以填充元素与系统剪贴板内容。 这手动处理100%的时间,但execCommand几乎所有的时候都在Selenium下运行时返回false。

我在最初的driver.get(myChromeExtensionURL)之后添加了一个driver.refresh(),现在它可以在100%的时间内运行。 这是在Mac OS 10.9上的Selenium驱动程序版本2.16.333243和Chrome版本43。

当我研究这个问题的时候,我没有看到任何关于这个解决方法的提及,所以我想我会在Selenium / focus / execCommand('paste')脚步中logging下我的发现。

焦点只有在窗口焦点时才有效。

使用((JavascriptExecutor)webDriver).executeScript("window.focus();"); 为了确定。