Selenium Webdriver-滚动到DIV中以打印整个DIV

时间:2019-03-19 20:52:41

标签: c# html selenium scroll

我需要滚动到DIV才能打印整个页面。

我已经在DIV元素上尝试过SendKeys,但是它滚动了整个页面。 我不希望有一种解决方案可以滚动到已定义的对象,因为我有许多不同的屏幕,这些屏幕的属性带有不同的元素。

DIV为:

<div class="content modal-overflow">

它的CSS类:

  .modal-overflow
 {  
  max-height:430px;
  overflow:auto
 }

430px是DIV的可见部分。整个DIV具有750像素。

代码:

 <div class="modal fade" id="modalDetalhes" tabindex="-1" role="dialog">
      <div class="modal-dialog width750">
          <div class="modal-content">
            <div class="modal-header">
               </span></button>
            </div>
            <div class="modal-body">
                    (...)

                <div class="content modal-overflow">
                    <div class="row">
                        <div class="col-md-3">
                            <div class="form-group">
                                (...)

今天,我使用一个功能来获取整个屏幕截图。 我使用了以下解决方案: Selenium WebDriver C# Full Website Screenshots With ChromeDriver and FirefoxDriver

我该如何滚动打印整个DIV?

1 个答案:

答案 0 :(得分:0)

这是获取特定元素的屏幕截图的方法。

public static void TakeElementScreenshot(IWebDriver driver, IWebElement element)
{
    try
    {
        string screenshotName = DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + "element_screenshot.jpg";
        Byte[] byteArray = ((ITakesScreenshot)driver).GetScreenshot().AsByteArray;
        System.Drawing.Bitmap screenshot = new System.Drawing.Bitmap(new System.IO.MemoryStream(byteArray));
        System.Drawing.Rectangle eleImage = new System.Drawing.Rectangle(element.Location.X, element.Location.Y, element.Size.Width, element.Size.Height);
        screenshot = screenshot.Clone(eleImage, screenshot.PixelFormat);
        screenshot.Save(String.Format(@"here goes the folder path" + screenshotName, System.Drawing.Imaging.ImageFormat.Jpeg));
    }
    catch (Exception e)
    {
        logger.Error(e.StackTrace + ':' + e.Message);
    }
}

如果必须滚动到该元素,请使用以下内容。

var elem = driver.FindElement(By.ClassName("content modal-overflow"));
driver.ExecuteScript("arguments[0].scrollIntoView(true);", elem);

不确定您的意思是“我不希望解决方案滚动到定义的对象,因为我有许多不同的屏幕,但这些屏幕具有不同的元素。”您是否希望在模态窗口中查看内容?