使用 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
。
因为IWebElement
和IWebDriver
一样有FindElement
、FindElements
等方法,所以我们可以使用表格的FindElements
方法找到表格的所有tr
元素的子元素,即所有表中的行。
然后我们得到一个随机数作为行集合的索引。此数字的最大值必须比行数小 1。如果我们要允许选择标题行,那么最小值必须为 0,否则必须为 1。
最后,rows[rowNumber]
是我们随机选择的行。
此示例使用 NUnit 作为测试运行程序和 IWebDriver
的 ChromeDriver 实现,但对于任何浏览器和测试运行程序都应该以相同的方式工作。
注意事项 - 如果您的表格包含另一个表格,此方法可以从外部表格或内部表格中选择一行,尽管由于问题没有提到表格中的表格,我没有满足这一点为了简单起见的可能性。
【讨论】:
以上是关于使用 c#、selenium 和 jquery 实现 IE 自动化 - 从动态表中随机获取的主要内容,如果未能解决你的问题,请参考以下文章
JavascriptExecutor(Selenium WebDriver C#)不断返回空对象
Selenium:使用 C# 在 IWebElement 上触发鼠标滚轮
selenium webdriver 中数据填错了.浏览器自动停止,手动改完后继续自动执行怎么实