我有一个项目要用C#使用Selenium WebDriver点击web页面上的特定链接,我正在努力找到一种干净的方法,用一个数组来迭代这些链接,以说明特定的情况。
<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>
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++ 使用输出迭代器的使用技巧和注意事项,需要的朋友参考一下 示例 通过将输出迭代器传递给函数,可以返回相同类型的多个值。这对于一般功能(例如标准库的算法)尤其常见。 例: 用法示例:
问题内容: 如果我在java中的链表上使用了for-each循环,是否可以保证以它们在列表中出现的顺序迭代元素? 问题答案: 保证链表按顺序运行。 从文档中 有序集合(也称为序列)。该界面的用户可以精确控制列表中每个元素的插入位置。用户可以通过其整数索引(列表中的位置)访问元素,并在列表中搜索元素。 iterator() 以适当的顺序返回此列表中元素的迭代器。
迭代器可被用来访问一个容器类的所包函的全部元素,其行为像一个指针。举一个例子,你可用一个迭代器来实现对vector容器中所含元素的遍历。有这么几种迭代器如下: 迭代器 描述 input_iterator 提供读功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。 output_iterator 提供写功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。 forwar
问题内容: 编辑:获得一些反馈后,我创建了一个新示例,该示例应更具可重复性。 我一直在用C 编写一个项目,其中涉及许多链表迭代。为了获得基准,我重写了Go中的代码。令人惊讶的是,我发现即使将-O标志传递给clang ,Go实现的运行速度也始终稳定〜10%。可能我只是缺少一些C ++的明显优化,但是我已经通过各种调整将自己的头撞墙了一段时间了。 这是一个简化的版本,在C 和Go中具有相同的实现,其中
迭代器模式(Iterator Pattern) 目前已经是一个没落的模式, 基本上没人会单独写一个迭代器, 除非是产品性质的开发, 其定义如下: 它提供一种方法访问一个容器对象中各个元素, 而又不需暴露该对象的内部细节。
本文向大家介绍C++ 向量迭代器,包括了C++ 向量迭代器的使用技巧和注意事项,需要的朋友参考一下 示例 begin将an返回iterator到序列容器中的第一个元素。 end返回iterator末尾的第一个元素。 如果矢量对象const,无论是begin和end返回const_iterator。如果const_iterator即使向量不返回,也要返回const,则可以使用cbegin和cend。