使用 c#、selenium 和 jquery 实现 IE 自动化 - 从动态表中随机获取

Posted

技术标签:

【中文标题】使用 c#、selenium 和 jquery 实现 IE 自动化 - 从动态表中随机获取【英文标题】:IE automation with c#, selenium and jquery - random from dynamic table 【发布时间】:2021-10-09 10:41:38 【问题描述】:

我有一个动态表 - 这意味着每次它可以有不同的行数

我需要选择一行(不管是哪一行[随机])然后继续下一步

我真的不知道如何开始,希望得到你的帮助

谢谢!

【问题讨论】:

在这种情况下,“表”是什么意思?网页中的<table> 元素?数据库中的表?如果是后者,您使用的是什么数据库软件(SQL Server 等)?如果您在问题中添加minimum reproducible example,表明您正在尝试做什么,那么它将帮助我们更好地理解您的问题并增加获得答案的机会。 对不起,你是对的。我的意思是一个表格元素:) 【参考方案1】:

好的,我创建了一个 NUnit 测试项目并添加了 Selenium.WebDriver 和 Selenium.WebDriver.ChromeDriver NuGet 包。我在项目中添加了一个名为 page.html 的文件,将其“复制到输出目录”属性设置为“始终复制”并添加了以下标记 - 这只是为了让我有一个可以使用的页面。

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <table id="myTable">
        <thead>
            <tr><td>0</td><td>0</td></tr>
        </thead>
        <tbody>
            <tr><td>1</td><td>1</td></tr>
            <tr><td>2</td><td>2</td></tr>
            <tr><td>3</td><td>3</td></tr>
            <tr><td>4</td><td>4</td></tr>
            <tr><td>5</td><td>5</td></tr>
            <tr><td>6</td><td>6</td></tr>
        </tbody>
    </table>
</body>
</html>

这是我的测试:

namespace ***68649351RandomRow

    using NUnit.Framework;
    using OpenQA.Selenium;
    using OpenQA.Selenium.Chrome;
    using System;
    using System.IO;

    public class Tests
    
        [Test]
        public void Test1()
        
            IWebDriver driver = new ChromeDriver();
            try
            
                var path = Directory.GetCurrentDirectory();
                driver.Navigate().GoToUrl($"file://path/page.html");

                // Get the table by ID - don't want to assume that it's the only table on the page
                var table = driver.FindElement(By.Id("myTable"));

                // Get all the rows in the table
                var rows = table.FindElements(By.TagName("tr"));

                // pick a random row
                var random = new Random();
                var rowNumber = random.Next(rows.Count - 2) + 1; // use this line to exclude the header row
                // var rowNumber = random.Next(rows.Count - 1); // use this line to include the header row
                var row = rows[rowNumber];

                // Do something with the row
                Console.WriteLine(row.Text);
            
            finally
            
                driver.Quit();
            
        
    

那么这里发生了什么?

Directory.GetCurrentDirectory() 返回项目输出文件夹的路径,这是编译器将我的 page.html 文件复制到的位置,因此我可以在下一行中使用它来构建 file:// URL 到文件并导航到它。这是使用页面的稍微做作的方式的一部分,并且只需要使这个特定的示例工作。

接下来,我们使用其 ID 属性查找表。这给了我们一个代表表格的IWebElement

因为IWebElementIWebDriver一样有FindElementFindElements等方法,所以我们可以使用表格的FindElements方法找到表格的所有tr元素的子元素,即所有表中的行。

然后我们得到一个随机数作为行集合的索引。此数字的最大值必须比行数小 1。如果我们要允许选择标题行,那么最小值必须为 0,否则必须为 1。

最后,rows[rowNumber] 是我们随机选择的行。

此示例使用 NUnit 作为测试运行程序和 IWebDriver 的 ChromeDriver 实现,但对于任何浏览器和测试运行程序都应该以相同的方式工作。

注意事项 - 如果您的表格包含另一个表格,此方法可以从外部表格或内部表格中选择一行,尽管由于问题没有提到表格中的表格,我没有满足这一点为了简单起见的可能性。

【讨论】:

以上是关于使用 c#、selenium 和 jquery 实现 IE 自动化 - 从动态表中随机获取的主要内容,如果未能解决你的问题,请参考以下文章

JavascriptExecutor(Selenium WebDriver C#)不断返回空对象

Selenium:使用 C# 在 IWebElement 上触发鼠标滚轮

如何在 C# 中使用 Selenium?

selenium webdriver 中数据填错了.浏览器自动停止,手动改完后继续自动执行怎么实

如何使用 C# Selenium 调用 JS onclick 函数和参数

Selenium WebDriver - 如何使用 C# 设置页面加载超时