有没有办法在硒1。X或2。x来滚动浏览器窗口,以便XPath标识的特定元素在浏览器的视图中?在Selenium中有一个focus方法,但在FireFox中它似乎不能物理地滚动视图。有人有什么建议吗?

我需要这个的原因是我正在测试点击页面上的一个元素。不幸的是,除非元素是可见的,否则事件似乎无法工作。我无法控制单击元素时触发的代码,因此无法调试或修改它,因此,最简单的解决方案是将项目滚动到视图中。


当前回答

这段代码为我工作:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("javascript:window.scrollBy(250, 350)");

其他回答

我已经尝试了很多关于滚动的东西,但下面的代码提供了更好的结果。

这将滚动直到元素在视图中:

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

在页面上随机点一下:

driver.findElement(By.id("ID of a web element present below")).click

然后执行你想做的。

在Selenium中,我们需要借助JavaScript执行器来滚动到一个元素或滚动页面:

je.executeScript("arguments[0].scrollIntoView(true);", element);

在上面的语句中,元素就是我们需要滚动的元素。我尝试了上面的代码,它对我有用。

我有一个完整的帖子和视频:

http://learn-automation.com/how-to-scroll-into-view-in-selenium-webdriver/

Javascript

解决方法很简单:

const element = await driver.findElement(...)
await driver.executeScript("arguments[0].scrollIntoView(true);", element)
await driver.sleep(500);

如果该对象传递无效:

等待浏览器。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();