2012-07-05 73 views
42

WebDriver的selenium.focus()等效什么?使用Java在Selenium WebDriver中集中元素的正确方法

element.sendKeys(""); 

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

我已经试过他们与他们的工作,但一个总是在所有元素上工作?

哪一个是任何元素(如按钮,链接等)的正确方法?这对我来说很重要,因为该功能将用于不同的用户界面。

回答

44

下面的代码 -

element.sendKeys("");

试图找到一个输入标签框输入一些信息,而

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

是比较合适的,因为它会为图像元素的工作,链接元素,下拉框等。

因此使用moveToElement()方法更适用于关注网页上的任何通用WebElement。

对于输入框,您将必须单击()上的要关注的元素。

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

而链接和图片鼠标将超过特定的元素,你可以根据你想要做什么决定点击()就可以了。

如果点击()上的输入标签不起作用 -

既然你要这个功能是通用的,你先检查webElement是输入标签或不 -

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

} 

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

+0

它也适用于输入框吗? – questions

+0

让我知道我编辑的答案是否有帮助? –

+0

这应该工作。谢谢哥们! :) – questions

11

您可以使用JS如下:

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

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')脚步中。

1

焦点仅集中在窗口的功能。

使用((JavascriptExecutor)webDriver).executeScript("window.focus();");是肯定的。

相关问题