有没有办法在硒1。X或2。x来滚动浏览器窗口,以便XPath标识的特定元素在浏览器的视图中?在Selenium中有一个focus方法,但在FireFox中它似乎不能物理地滚动视图。有人有什么建议吗?
我需要这个的原因是我正在测试点击页面上的一个元素。不幸的是,除非元素是可见的,否则事件似乎无法工作。我无法控制单击元素时触发的代码,因此无法调试或修改它,因此,最简单的解决方案是将项目滚动到视图中。
有没有办法在硒1。X或2。x来滚动浏览器窗口,以便XPath标识的特定元素在浏览器的视图中?在Selenium中有一个focus方法,但在FireFox中它似乎不能物理地滚动视图。有人有什么建议吗?
我需要这个的原因是我正在测试点击页面上的一个元素。不幸的是,除非元素是可见的,否则事件似乎无法工作。我无法控制单击元素时触发的代码,因此无法调试或修改它,因此,最简单的解决方案是将项目滚动到视图中。
当前回答
你可能想要访问页面滚动网页元素和网页-硒WebDriver使用Javascript:
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
FirefoxDriver ff = new FirefoxDriver();
ff.get("http://toolsqa.com");
Thread.sleep(5000);
ff.executeScript("document.getElementById('text-8').scrollIntoView(true);");
}
其他回答
如果您认为其他答案太俗气,那么这个答案也是,但是这里不涉及JavaScript注入。
当按钮离开屏幕时,它会中断并滚动到它,所以重试它…¯\_()_/¯
try
{
element.Click();
}
catch {
element.Click();
}
你可以使用下面的代码片段来滚动:
C#
var element = Driver.FindElement(By.Id("element-id"));
Actions actions = new Actions(Driver);
actions.MoveToElement(element).Perform();
好了
我一直在用ADF组件做测试,如果使用惰性加载,你必须有一个单独的滚动命令。如果未加载对象,并且尝试使用Selenium查找它,则Selenium将抛出一个“元素未找到”异常。
如果该对象传递无效:
等待浏览器。executeScript("arguments[0]. scrollintoview()",等待浏览器。(等到。elementLocated(通过。xpath(“/ / div [@jscontroller = ' MC8mtf '] ")), 1000));
有一个演示滚动到麦克风按钮,在谷歌页面。通过javascript xpath找到它,使用chromedriver和selenium-webdriver。
Start1()在狭窄的窗口中启动浏览器,麦克风按钮不显示。
Start2()在狭窄的窗口中启动浏览器,然后滚动到麦克风按钮。
require('chromedriver');
const { Builder,
By,
Key,
until
} = require('selenium-webdriver');
async function start1() {
var browser = new Builder()
.forBrowser( 'chrome' )
.build();
await browser
.manage()
.window()
.setRect( { width: 80,
height: 1040,
x:-10,
y:0}
);
await browser.navigate().to( "https://www.google.com/" );
}
async function start2() {
var browser = new Builder()
.forBrowser( 'chrome' )
.build();
await browser
.manage()
.window()
.setRect( { width: 80,
height: 1040,
x:-10,
y:0}
);
await browser.navigate().to( "https://www.google.com/" );
await browser.executeScript( "document.evaluate(\"//div[@jscontroller='MC8mtf']\", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.scrollIntoView(true);");
}
start1();
start2();
我已经尝试了很多关于滚动的东西,但下面的代码提供了更好的结果。
这将滚动直到元素在视图中:
WebElement element = driver.findElement(By.id("id_of_element"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
Thread.sleep(500);
//do anything you want with the element