使用 Selenium C# 将值从不可知网格读取到列表<string>或数据表中

问题描述 投票:0回答:1

我正在尝试使用 selenium c# 读取网页上的不可知网格,并希望根据列名称存储文本。我不太喜欢 DataTable,所以我更喜欢 List 而不是 DT。

问题:网格有滚动条,可以向右或向左滚动。由于只有几行,因此没有垂直滚动条。检查完元素后,我发现只为 ag 生成了几个 div。当我使用滚动条向右滚动时,会为右侧列生成 div。一旦我向左滚动,后面生成的 div 就消失了。因此,简而言之,仅为可见列生成 div。

到目前为止我尝试过的:我使用

读取网格
IList<IWebElement> agGrid = driver.FindElements(GetLocator("//div[@class='ag-center-cols-container']//div[@role='row']"));

我遍历每一行来获取列值,并尝试了多种方法来读取列值:

foreach (IWebElement row in agGrid)
{
    if (row.Text.ToString() == "")
        continue;
    else
    {
        //get first row and click on it to hightlight
        IList<IWebElement> RowData = row.FindElements(By.TagName("div"));
        RowData[0].Click();
        
        //tried to scroll towards end
//IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
//js.ExecuteScript("javascript:window.scrollBy(250,350)");

RowData = row.FindElements(By.TagName("div"));

//get data using colindex attribute. But I was not aware exactly how to do this
//IList<IWebElement> RowData1 = row.FindElements(By.("aria-colindex"));
List<string> dat = RowData.Select(x => x.Text).ToList(); //this doesn't give all the data

//WebElement.SendKeys(Keys.ArrowRight);

//find the horizontal scrollbar element & than scroll
//IWebElement element = driver.FindElement(By.Id("ag-body-horizontal-scroll-container"));
//element.SendKeys(Keys.ArrowRight);
//Actions actions = new Actions(driver);
//actions.MoveToElement(element);
//actions.Perform();

//find the last column and than scroll
IWebElement element = row.FindElement(By.CssSelector("div[@aria-colindex='30']"));
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView(true);", element);
Thread.Sleep(500);

    }
}

以上方法均无效。所以不得不发帖提问。谁能帮我解决这个问题吗?预先感谢。

c# selenium-webdriver xpath ag
1个回答
0
投票

我猜你只需要向左滚动一页,收集数据并再次滚动,直到拥有所有内容:

((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollBy(arguments[0].clientWidth, 0);", ScrollableArea.ActualWebElement);
© www.soinside.com 2019 - 2024. All rights reserved.