如何从 C# 自动 Firefox 登录网站

本文关键字:Firefox 登录 网站 自动 | 更新日期: 2023-09-27 18:37:15

我想从 c# 应用程序发送一个命令,在 Firefox 中打开一个网页,填写一个表单并单击一个按钮。

我不想使用硒,我能做些什么来自己构建它?

如何从 C# 自动 Firefox 登录网站

像Selenium这样的框架之所以有效,是因为网站是温和的,像Firefox这样的浏览器已经实现了所需的请求和响应,而像Selenium这样的框架建立在它之上。

至于配置文件问题,请查看此处以获取有关为Selenium创建自定义配置文件的一些信息,然后像这样实例化驱动程序:

driver = new FirefoxDriver(new FirefoxProfile(@"...''AppData''Roaming''Mozilla''Firefox''Profiles''7923jt85.default"));

我个人更喜欢Selenium的API。基本上,我在 firefox 中使用 IDE 扩展来记录和导出 C# 测试用例,然后使用输出来弄清楚 Selenium 如何解析 html,然后构建一个库包装器以使其可以根据我的需求进行定制。(导出的测试用例有很多 NUnit 测试框架属性,我只是删除所有这些属性,然后调用给定的方法。

下面的示例将打开 Firefox,在谷歌上搜索"可爱毛茸茸的猫",然后单击"图像"选项卡。如有必要,您可以使用 API 执行更多操作,只需查看文档中可用的内容即可。(您可以复制此源代码,在Visual Studio中创建控制台项目,添加Selenium引用,然后看到它在您眼前执行。

另一种选择是WatiN,但它类似于Selenium,Selenium是一个测试框架,适用于构建并希望测试其网站的用户体验的人。

using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support.UI;
namespace SeleniumTests
{
    public class Googletest
    {
        private IWebDriver driver;
        private WebDriverWait wait;
        private StringBuilder verificationErrors;
        private string baseURL;
        private bool acceptNextAlert = true;
        public static void Main(string[] args)
        {
            var gt = new Googletest();
            gt.SetupTest();
            gt.TheGoogleTest();
            //gt.TeardownTest();
        }
        public void SetupTest()
        {
            driver = new FirefoxDriver();
            wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
            baseURL = "https://www.google.com/";
            verificationErrors = new StringBuilder();
        }
        public void TeardownTest()
        {
            try
            {
                driver.Quit();
            }
            catch (Exception)
            {
                // Ignore errors if unable to close the browser
            }
        }
        public void TheGoogleTest()
        {
            driver.Navigate().GoToUrl(baseURL + "/");
            driver.FindElement(By.Id("gbqfq")).Clear();
            driver.FindElement(By.Id("gbqfq")).SendKeys("Cute Fluffy Cats");
            driver.FindElement(By.Id("gbqfb")).Click();
            wait.Until(d => d.FindElement(By.LinkText("Images"))).Click();
        }
        private bool IsElementPresent(By by)
        {
            try
            {
                driver.FindElement(by);
                return true;
            }
            catch (NoSuchElementException)
            {
                return false;
            }
        }
        private bool IsAlertPresent()
        {
            try
            {
                driver.SwitchTo().Alert();
                return true;
            }
            catch (NoAlertPresentException)
            {
                return false;
            }
        }
        private string CloseAlertAndGetItsText()
        {
            try
            {
                IAlert alert = driver.SwitchTo().Alert();
                string alertText = alert.Text;
                if (acceptNextAlert)
                {
                    alert.Accept();
                }
                else
                {
                    alert.Dismiss();
                }
                return alertText;
            }
            finally
            {
                acceptNextAlert = true;
            }
        }
    }
}