10

C# アプリケーションから Firefox で URL をキャプチャする最も単純なタスクから始めます。user32.dll Windows API 関数を使用すると、IE 内で URL をキャプチャする方法と同様に機能しないようです。

4

7 に答える 7

4

たとえば、AutoHotkey を使用して URL をキャプチャする必要がある場合は、Ctrl+L (アドレス バーにフォーカスを置いてコンテンツを強調表示) と Ctrl+C (選択内容をクリップボードにコピー) を送信します。次に、クリップボードを読み取って情報を取得します。

より複雑なタスクには、Greasemonkey または iMacros の拡張機能を使用します。おそらく、同様のキーボード ショートカットによってトリガーされます。

于 2008-09-26T05:20:57.927 に答える
4

WatiNは Firefox をサポートしています。

于 2008-09-26T06:35:45.170 に答える
3

WebAiiは、URL の設定と取得を含め、FireFox を自動化できます

于 2008-09-26T05:15:36.207 に答える
2

Selenium (Google テスト エンジン - http://seleniumhq.org/ ) を試してみてください。Firefox で実行されたタスク (Web ページ UI 関連) を記録し、記録を C# ソースに変換できます :)

于 2009-01-14T09:24:19.010 に答える
2

C# 用の Selenium WebDriver を使用できます。

これは、Java、C# などの API を使用してさまざまなブラウザーを制御できるクロスプラットフォーム API です。

Selenium WebDriver テストを含むコード C# の添付。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Interactions.Internal;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium.IE;
using NUnit.Framework;
using System.Text.RegularExpressions;

namespace sae_test
{   class Program
    {   private static string baseURL;
        private static StringBuilder verificationErrors;

    static void Main(string[] args)
    {   // test with firefox
        IWebDriver driver = new OpenQA.Selenium.Firefox.FirefoxDriver();
        // test with IE
        //InternetExplorerOptions options = new InternetExplorerOptions();
        //options.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
        //IWebDriver driver = new OpenQA.Selenium.IE.InternetExplorerDriver(options);
        SetupTest();
        driver.Navigate().GoToUrl(baseURL + "Account/Login.aspx");
        IWebElement inputTextUser = driver.FindElement(By.Id("MainContent_LoginUser_UserName"));
        inputTextUser.Clear();
        driver.FindElement(By.Id("MainContent_LoginUser_UserName")).Clear();
        driver.FindElement(By.Id("MainContent_LoginUser_UserName")).SendKeys("usuario");
        driver.FindElement(By.Id("MainContent_LoginUser_Password")).Clear();
        driver.FindElement(By.Id("MainContent_LoginUser_Password")).SendKeys("123");
        driver.FindElement(By.Id("MainContent_LoginUser_LoginButton")).Click();
        driver.Navigate().GoToUrl(baseURL + "finanzas/consulta.aspx");
        // view combo element
        IWebElement comboBoxSistema = driver.FindElement(By.Id("MainContent_rcbSistema_Arrow"));
        //Then click when menu option is visible 
        comboBoxSistema.Click();
        System.Threading.Thread.Sleep(500);
        // container of elements systems combo
        IWebElement listaDesplegableComboSistemas = driver.FindElement(By.Id("MainContent_rcbSistema_DropDown"));
        listaDesplegableComboSistemas.FindElement(By.XPath("//li[text()='BOMBEO MECANICO']")).Click();
        System.Threading.Thread.Sleep(500);
        IWebElement comboBoxEquipo = driver.FindElement(By.Id("MainContent_rcbEquipo_Arrow"));
        //Then click when menu option is visible 
        comboBoxEquipo.Click();
        System.Threading.Thread.Sleep(500);
        // container of elements equipment combo
        IWebElement listaDesplegableComboEquipos = driver.FindElement(By.Id("MainContent_rcbEquipo_DropDown"));

        listaDesplegableComboEquipos.FindElement(By.XPath("//li[text()='MINI-V']")).Click();
        System.Threading.Thread.Sleep(500);

        driver.FindElement(By.Id("MainContent_Button1")).Click();            
        try
        {   Assert.AreEqual("BOMBEO MECANICO_22", driver.FindElement(By.XPath("//*[@id=\"MainContent_RejillaRegistroFinanciero_ctl00_ctl04_LabelSistema\"]")).Text);
        }
        catch (AssertionException e)
        {   verificationErrors.Append(e.Message);
        }
        // verify coin format $1,234,567.89 usd
        try
        {   Assert.IsTrue(Regex.IsMatch(driver.FindElement(By.XPath("//*[@id=\"MainContent_RejillaRegistroFinanciero_ctl00_ctl04_labelInversionInicial\"]")).Text, "\\$((,)*[0-9]*[0-9]*[0-9]+)+(\\.[0-9]{2})? usd"));
        }
        catch (AssertionException e)
        {   verificationErrors.Append(e.Message);
        }
        try
        {   Assert.IsTrue(Regex.IsMatch(driver.FindElement(By.XPath("//*[@id=\"MainContent_RejillaRegistroFinanciero_ctl00_ctl04_labelCostoOpMantto\"]")).Text, "\\$((,)*[0-9]*[0-9]*[0-9]+)+(\\.[0-9]{2})? usd"));
        }
        catch (AssertionException e)
        {   verificationErrors.Append(e.Message);
        }
        try
        {   Assert.IsTrue(Regex.IsMatch(driver.FindElement(By.XPath("//*[@id=\"MainContent_RejillaRegistroFinanciero_ctl00_ctl04_labelCostoEnergia\"]")).Text, "\\$((,)*[0-9]*[0-9]*[0-9]+)+(\\.[0-9]{2})? usd"));
        }
        catch (AssertionException e)
        {   verificationErrors.Append(e.Message);
        }
        try
        {   Assert.IsTrue(Regex.IsMatch(driver.FindElement(By.XPath("//*[@id=\"MainContent_RejillaRegistroFinanciero_ctl00_ctl04_labelcostoUnitarioEnergia\"]")).Text, "\\$((,)*[0-9]*[0-9]*[0-9]+)+(\\.[0-9]{2})? usd"));
        }
        catch (AssertionException e)
        {   verificationErrors.Append(e.Message);
        }
        // verify number format 1,234,567.89
        try
        {   Assert.IsTrue(Regex.IsMatch(driver.FindElement(By.XPath("//*[@id=\"MainContent_RejillaRegistroFinanciero_ctl00_ctl04_labelConsumo\"]")).Text, "((,)*[0-9]*[0-9]*[0-9]+)+(\\.[0-9]{2})?"));
        }
        catch (AssertionException e)
        {   verificationErrors.Append(e.Message);
        }
        System.Console.WriteLine("errores: " + verificationErrors);
        System.Threading.Thread.Sleep(20000);
        driver.Quit();
    }

    public static void SetupTest()
    {   baseURL = "http://127.0.0.1:8081/ver.rel.1.2/";
        verificationErrors = new StringBuilder();
    }

    protected static void mouseOver(IWebDriver driver, IWebElement element)
    {   Actions builder = new Actions(driver);
        builder.MoveToElement(element);
        builder.Perform();
    }

    public static void highlightElement(IWebDriver driver, IWebElement element)
    {   for (int i = 0; i < 2; i++)
        {   IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
            js.ExecuteScript("arguments[0].setAttribute('style', arguments[1]);",
                    element, "color: yellow; border: 2px solid yellow;");
            js.ExecuteScript("arguments[0].setAttribute('style', arguments[1]);",
                    element, "");
        }
    }
}
}
于 2014-01-28T23:34:35.700 に答える
2

非常にベータ版のようですが、誰かがmozrepl用の.net コネクタを構築しました。実は、mozrepl のコードベースはgithubに移動したばかりです。しかし、mozrepl を使用すると、Firefox の XUL 環境にコマンドを発行できます。

于 2008-09-26T05:28:15.363 に答える
1

私が遭遇した 1 つの Microsoft ツール:

.NET 3.5 の一部としての UI オートメーション http://msdn.microsoft.com/en-us/library/aa348551.aspx

例を次に示します: http://msdn.microsoft.com/en-us/library/ms771286.aspx

PC に Firefox を調査するための UI Spy がないため、これが user32.dll の問題に役立つかどうかわかりません。

于 2008-09-26T05:23:22.333 に答える