首页 > 解决方案 > 使用 AutoIT 进程后,如何将 Selenium Webdriver C# 重新聚焦到窗口?

问题描述

我使用 AutoIt 处理 Selenium Webdriver 无法向其发送密钥的身份验证弹出窗口。现在,在 AutoIT 流程之后,我可以成功登录网站,但流程之后的代码似乎都不起作用。我认为窗口可能不再是 Selenium Webdriver 的重点。

有没有办法在身份验证弹出窗口发生之前获取窗口的句柄/名称,然后在该过程之后使用它来重新关注窗口?

以下是我当前的代码:

using System;
using System.Diagnostics;
using System.Threading;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System.Linq;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Support.UI;


namespace Selenium
{
    [TestClass]
    public class UnitTest1
    {
        static IWebDriver driverGC;

        public object ExpectedConditions { get; private set; }

        [AssemblyInitialize]
        public static void SetUp(TestContext context)
        {
            driverGC = new ChromeDriver(@"C:\Browser Drivers\Chrome");

        }
        [TestMethod]
        public void TestGC()
        {
            string UserNameGC = "username@website";

            try
            {

                driverGC.Navigate().GoToUrl("https://WEBSITE.com/");
                **string parentWindow = driverGC.CurrentWindowHandle.ToString();**

                driverGC.FindElement(By.Id("i0116")).SendKeys(UserNameGC);
                driverGC.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
                driverGC.FindElement(By.Id("idSIButton9")).Click();

                Thread.Sleep(3000);

                Process.Start(@"C:\AutoIT.exe");

                Thread.Sleep(6000);

                driverGC.SwitchTo().Window(parentWindow);
                driverGC.FindElement(By.Id("search-reviewee")).SendKeys("John Smith");
                Thread.Sleep(3000);
                driverGC.FindElement(By.Id("searchbtn")).Click();




            }

            catch (Exception ex)
            {

            }

            finally
            {
                driverGC.Dispose();
                driverGC.Quit();
            }

        }
    }
}

我尝试使用string parentWindow = driverGC.CurrentWindowHandle.ToString()来获取句柄,然后(在处理之后)driverGC.SwitchTo().Window(parentWindow); 返回窗口。

编辑:我使用的是 Chrome 版本 78.0.3904.108。

提前致谢。

标签: c#seleniumselenium-webdriverfocusautoit-c#-wrapper

解决方案


要在使用 AutoIT 进程后将Selenium Webdriver焦点返回到窗口,您可以使用以下命令:

((IJavaScriptExecutor)driver).ExecuteScript("window.focus();");

推荐阅读