gpt4 book ai didi

c# - 使用带有 C# 的 Selenium WebDriver 迭代链接

转载 作者:行者123 更新时间:2023-11-30 22:53:02 25 4
gpt4 key购买 nike

我有一个项目可以使用带有 C# 的 Selenium WebDriver 单击网页上的特定链接,我正在努力寻找一种干净的方法来使用一个数组来迭代这些链接,以说明特定情况。

我知道如何做基本的 driver.FindElement(By.XPath(""));

但我不确定如何创建一个 WebElement 数组来提供一个 foreach 语句,该语句将在特定的 div 类中搜索 By.TagName("a") 而无需提取页面上的每个链接。

网站标题的示例:

<header>
<div id="ContainerTopStrip">
<div class="ContainerWidth">
<div class="headerMenu">
<a href="Account/IntakeLogin" title="Report">Report</a>
<a href="/rfs" title="Request">Request</a>
<a href="javascript:void(0);" onclick="openFullWindow();" title="Lookup">Lookup</a>
</div>
</div>
</div>
</header>

我刚刚使用 findelement 的基本示例:

using System;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium.Chrome;
using System.Collections.Generic;

class Program
{
static void Main()
{
using (IWebDriver driver = new ChromeDriver("C:\\"))
{
driver.Navigate().GoToUrl("xxx");
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(60);

driver.FindElement(By.XPath("//a[text()=\"xxx\"]")).Click();
// TODO: Figure out how to assert route change occurred

driver.FindElement(By.XPath("//a[text()=\"xxx\"]")).Click();
driver.Navigate().Back();

driver.FindElement(By.XPath("//a[text()=\"xxx/I\")]")).Click();
driver.Navigate().Back();

Console.WriteLine("This is what happens when you don't know how to make an array.");
driver.Quit();
}
}
}

总结一下:

需要帮助找到一种方法来创建一个数组,该数组可以找到要在循环中单击的特定链接,因为这似乎是现在搜索一段时间后最简洁的解决方案。如果有更好的建议,我愿意接受。总体上对 C#/Selenium 来说是全新的。

最佳答案

通过确定链接的xpath可以得到所有的链接

var links = myWebDriver.FindElements(By.XPath("/html/body/div[2]/header/div[1]/div/div/a"));

//loop through all header links
for (int i = 0; i < links.Count; i++)
{
//reassignment because of reloading the page after each navigation
links = myWebDriver.FindElements(By.XPath("/html/body/div[2]/header/div[1]/div/div/a"));
myWebDriver.Navigate().GoToUrl(links[i].GetAttribute("href"));
//or you can click
//links[i].Click();
myWebDriver.Navigate().Back();
}

下一个链接如图所示:

var links2 = myWebDriver.FindElements(By.XPath("/html/body/div[2]/header/div[2]/div/ul/li/a"));
for (int i = 0; i < links2.Count; i++)
{
links2 = myWebDriver.FindElements(By.XPath("/html/body/div[2]/header/div[2]/div/ul/li/a"));
myWebDriver.Navigate().GoToUrl(links2[i].GetAttribute("href"));
//or you can click
//links2[i].Click();
myWebDriver.Navigate().Back();
}

关于c# - 使用带有 C# 的 Selenium WebDriver 迭代链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57667651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com