正确的方式来使用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();");
为了确定。