WebDriver的selenium.focus()
相当于什么?
element.sendKeys("");
或
new Actions(driver).moveToElement(element).perform();
我已经尝试了他们两个并且他们工作了,但哪一个总是适用于所有元素?
对于任何元素(例如按钮,链接等),哪一个是正确的方法?这对我很重要,因为该功能将用于不同的UI。
答案 0 :(得分:53)
以下代码 -
element.sendKeys("");
尝试查找输入标记框以输入一些信息,而
new Actions(driver).moveToElement(element).perform();
更合适,因为它适用于图像元素,链接元素,下拉框等。
因此,使用 moveToElement()方法更有意义地关注网页上的任何通用WebElement。
对于输入框,您必须在要关注的元素上单击()。
new Actions(driver).moveToElement(element).click().perform();
对于链接和图像,鼠标将在该特定元素上方,您可以决定点击它()取决于您想要做什么。
如果输入标记上的click()不起作用 -
由于您希望此函数是通用的,因此首先要检查webElement是否为输入标记 -
if("input".equals(element.getTagName()){
element.sendKeys("");
}
else{
new Actions(driver).moveToElement(element).perform();
}
您可以根据自己的喜好进行类似的更改。
答案 1 :(得分:11)
您可以使用以下JS:
WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("document.getElementById('elementid').focus();");
答案 2 :(得分:1)
FWIW,我认为这是一个相关的问题并提出了一个解决方法:我写了一个Chrome扩展程序,它将document.execCommand('paste')写入textarea,重点放在窗口卸载上,以便填充元素与系统剪贴板内容。这种方式100%手动工作,但execCommand几乎一直在Selenium下运行时返回false。
我在初始的driver.get(myChromeExtensionURL)之后添加了一个driver.refresh(),现在它可以100%的时间工作。这是在Selenium驱动程序版本2.16.333243和Chrome版本43在Mac OS 10.9上。
当我研究这个问题时,我没有看到任何提及这种解决方法,所以我想我会记录下我的Selenium / focus / execCommand('paste')脚步中的那些发现。
答案 3 :(得分:1)
仅当窗口聚焦时,焦点才有效。
使用((JavascriptExecutor)webDriver).executeScript("window.focus();");
来确定。
答案 4 :(得分:1)
此代码实际上并未提供焦点:
new Actions(driver).moveToElement(element).perform();
它提供了悬停效果。
此外,JS代码.focus()要求窗口处于活动状态才能工作。
js.executeScript("element.focus();");
我发现此代码有效:
element.sendKeys(Keys.SHIFT);
对于我自己的代码,我同时使用:
element.sendKeys(Keys.SHIFT);
js.executeScript("element.focus();");
答案 5 :(得分:0)
我们还可以使用以下代码集中网络元素:
public focusElement(WebElement element){
String javaScript = "var evObj = document.createEvent('MouseEvents');"
+ "evObj.initMouseEvent(\"mouseover\",true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);"
+ "arguments[0].dispatchEvent(evObj);";
((JavascriptExecutor) getDriver()).executeScript(javaScript, element);
}
希望它会有所帮助:)
答案 6 :(得分:0)
C#扩展方法代码,焦点元素,输入文本,调用change()。
public static void EnterText(this IWebDriver driver, IWebElement element, string textToEnter)
{
var js = (IJavaScriptExecutor)driver;
js.ExecuteScript("arguments[0].focus();", element);
js.ExecuteScript("arguments[0].setAttribute('value', arguments[1])", element, textToEnter);
js.ExecuteScript("$(arguments[0]).change();", element);
}
致电者:
driver.EnterText(element, text);