我在将值写入输入元素时遇到问题。
当 Selenium 调用该输入字段时,页面会滚动到顶部,并且输入会隐藏在导航栏后面。
在上诉之前,我执行了以下代码:
int elementPosition = element.getLocation().getY();
String js = String.format("window.scroll(0, %s)", elementPosition-90);
((JavascriptExecutor)driver).executeScript(js);
但即使在我滚动之后,输入仍然被隐藏。
另外,我尝试通过 JavaScript 为该字段设置一个值:
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].setAttribute('value', '"+date+"')",element);
不幸的是,这也无济于事。
环境:Selenium 3.6.0 ver,FireFox 66 ver。
答案1
我使用下面一对方法来滚动到视图中:
/**
* Wait until JQuery is inactive
* @author Bill Hileman
*/
public void waitForJQueryToBeInactive() {
Boolean isJqueryUsed = (Boolean) ((JavascriptExecutor) driver)
.executeScript("return (typeof(jQuery) != 'undefined')");
if (isJqueryUsed) {
while (true) {
// JavaScript test to verify jQuery is active or not
Boolean ajaxIsComplete = (Boolean) (((JavascriptExecutor) driver)
.executeScript("return jQuery.active == 0"));
if (ajaxIsComplete)
break;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}
}
/**
* Scroll a web element into view
* @author Bill Hileman
* @param ele - WebElement
*/
public void scrollIntoView(WebElement ele) {
((JavascriptExecutor)driver).executeScript("window.scrollTo(" + ele.getLocation().x +
"," + ele.getLocation().y + ")");
waitForJQueryToBeInactive();
}
答案2
我测试的网站是用 ExtJS 单页类型的网页编写的。当元素不在视图中时,我仍然能够使用该.SendKeys()
方法在框中输入内容。这种情况发生得非常快,但我正在使用的框在屏幕上聚焦,没有任何问题。
如果您在语句thread.sleep();
后面放置一个.SendKeys()
,您应该会在页面的可见位置看到您正在交互的框。