C# 如何使用Selenium浏览网页链接并再次返回?

C# 如何使用Selenium浏览网页链接并再次返回?,c#,selenium,selenium-webdriver,automated-tests,C#,Selenium,Selenium Webdriver,Automated Tests,我正在尝试查找网页上的所有超链接,其中链接文本也在列表footerNames中。我想单击链接,等待(稍后将进行验证签入),导航回,然后单击AllLinksRefs列表中的下一个链接(其中应包含所有必要的网页链接元素)。目前,我能够找到第一个链接,单击它,导航回来,但测试失败。我正在将Selenium WebDriver与C#一起使用。提前谢谢 public void TestFooterPageLinks() { List<IWebElement> a

我正在尝试查找网页上的所有超链接,其中链接文本也在列表footerNames中。我想单击链接,等待(稍后将进行验证签入),导航回,然后单击AllLinksRefs列表中的下一个链接(其中应包含所有必要的网页链接元素)。目前,我能够找到第一个链接,单击它,导航回来,但测试失败。我正在将Selenium WebDriver与C#一起使用。提前谢谢

    public void TestFooterPageLinks()
    {
        List<IWebElement> allLinksHrefs = new List<IWebElement>();
        List<String> allLinksText = new List<String>();
        String currentUrl = Browser.Url;

        List<String> footerNames = new List<String>();
        footerNames.Add("About");
        footerNames.Add("Press");
        footerNames.Add("Safety");
        footerNames.Add("Privacy");
        footerNames.Add("Help");
        footerNames.Add("Terms");
        foreach (IWebElement link in Browser.FindElements(By.TagName("a")))
        {
            if (footerNames.Contains(link.Text))
            {
                if (allLinksHrefs.Contains(link)) {
                    continue;
                }
                else {
                    allLinksHrefs.Add(link);
                    Console.WriteLine(link);
                }
            }
        }
        foreach (IWebElement pageLink in allLinksHrefs)
        {
            Console.WriteLine(pageLink);
            pageLink.Click();
            Console.WriteLine(Browser.Title);
            Browser.Wait(3);
            Browser.Back();
        }
    }
}
public void TestFooterPageLinks()
{
List allLinksHrefs=新列表();
List allLinksText=新列表();
字符串currentUrl=Browser.Url;
List footerNames=新列表();
页脚名称。添加(“关于”);
页脚名称。添加(“按”);
页脚名称。添加(“安全”);
页脚名称。添加(“隐私”);
footerNames.Add(“帮助”);
页脚名称。添加(“条款”);
foreach(Browser.FindElements(按.TagName(“a”))中的IWebElement链接)
{
if(footerNames.Contains(link.Text))
{
if(allLinksHrefs.Contains(link)){
继续;
}
否则{
allLinksHrefs.Add(link);
控制台写入线(链接);
}
}
}
foreach(所有链接中的IWebElement页面链接)
{
控制台写入线(页面链接);
pageLink.Click();
Console.WriteLine(Browser.Title);
浏览器。等待(3);
Browser.Back();
}
}
}

以下是我可能实现这一目标的方法:

List<WebElement> links = driver.findElements(By.cssSelector('a'));
然后具有支持的访问页面功能

public void visitPage(WebElement link) {
    try {
        link.click()
        Console.WriteLine("Visited Page: " + driver.getTitle() + " at url: " + link.text()); //for page title
    } catch (Exception e) {
        //do something clever with error handling
        e.printStackTrace();
    } 
    // navigate back
    driver.manage.navigate.back();  //go back to previous page (maybe don't even care about this)
}
  • 这是未经测试的

尝试以这种方式解决您的问题“导航回后,以前找到的元素将过期。因此,我们需要更新代码,以便在导航回后重新找到元素”

driver.navigate()。到(“http://www.example.com/");
列表链接=driver.findElements(按.tagName(“a”));
System.out.println(links.size());

对于(int i=0;i当您
driver.manage.navigate.back()
时,您的
链接的所有其余部分都将过时。此处讨论了一种可能的方法:
while (iter.hasNext()) {
    WebElement we = iter.next();
    visitPage(we);
}
public void visitPage(WebElement link) {
    try {
        link.click()
        Console.WriteLine("Visited Page: " + driver.getTitle() + " at url: " + link.text()); //for page title
    } catch (Exception e) {
        //do something clever with error handling
        e.printStackTrace();
    } 
    // navigate back
    driver.manage.navigate.back();  //go back to previous page (maybe don't even care about this)
}
driver.navigate().to("http://www.example.com/");
List<WebElement> links = driver.findElements(By.tagName("a"));
System.out.println(links.size());
for(int i=0; i<links.size(); i++) {
    // Print the link text
    System.out.println(links.get(i).getText());
    // Print the href's
    System.out.println(links.get(i).getAttribute("href"));
    links.get(i).click();
    System.out.println(driver.getTitle());
    System.out.println(driver.getCurrentUrl());
    driver.navigate().back();
    /* after navigating back the elements found previously will be expired. 
       Hence we need to update the code to refind the elements after navigate back.
       so again we write the links = driver.findElements(By.tagName("a")); */
    links = driver.findElements(By.tagName("a"));
}