c# - Webdriver 无法单击带有证书错误页面的弹出窗口

标签 c# javascript selenium selenium-webdriver

使用 webdriver 2.40.0(从 nugget 包安装)并用 C# 编写代码 - 打开我公司网站的链接,该链接会生成证书错误页面 - 单击覆盖链接元素以允许我继续访问该网站 - 单击该页面上的输入按钮,会生成一个弹出窗口,其顶部还有一个证书错误页面 我的问题是,当我尝试选择弹出窗口时,会抛出“noSuchWindowException”,代码:

namespace webDriverDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            string setURL = "xxxxx";

            IWebDriver driver = new InternetExplorerDriver(@"C:\Drivers");
            driver.Url = setURL;
            String loginPage = driver.CurrentWindowHandle;

            var securityLine = driver.FindElement(By.Id("overridelink"));
            if (!securityLine.Equals(null))
            {
                securityLine.Click();
            }

            var enterBtn = driver.FindElement(By.Id("EnterButton"));
            enterBtn.Click();

            //Select the pop up window


            driver.Navigate().GoToUrl("javascript:document.getElementById('overridelink').click()");

            driver.SwitchTo().Window("xxxx");

我已经尝试过:

driver.Navigate().GoToUrl("javascript:document.getElementById('overridelink').click()")

StringriskPage = driver.CurrentWindowHandle;

切换到那个窗口,我也尝试过

driver.SwitchTo().Window();

但我认为问题是我无法访问证书错误页面的窗口名称,也无法选择该页面上的元素并尝试将其保存为单独的句柄。真的需要帮助!

最佳答案

执行完启动弹出窗口的操作 enterBtn.Click(); 后,您需要将上下文切换到新窗口(使用它的窗口句柄,而不是标题)才能与之互动。

您可以从driver.WindowHandles列表中获取弹出窗口的句柄。

var riskPageHandle = driver.WindowHandles.FirstOrDefault(hwnd => hwnd != loginPageWindowHandle);

if(riskPageHandle ==null)
{
   //popup not found, log error or handle 
}
else
{
   //switch to the popup
   driver.SwitchTo().Window(riskPageHandle);
   Console.WriteLine("Popup window title is : " + driver.Title);

   //now accept the certificate error (your code, I haven't tried it)
   driver.Navigate().GoToUrl("javascript:document.getElementById('overridelink').click()");

}

关于c# - Webdriver 无法单击带有证书错误页面的弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22513566/

相关文章:

c# - 如何通过单击 ASP.NET gridview 中一行中的按钮获取行数据

c# - 为什么在 UI 线程上调用 Thread.Join() 不会挂起我的应用程序?

c# - 使用通用类型转换模型

javascript - slider 不再工作

javascript - 将弹出窗口更改为选项卡窗口

angularjs - 无法启动 ChromeDriver-Protractor

java - 查找Element的xpath地址

c# - 在 ASP.NET MVC 应用程序中看不到资源命名空间

javascript - 如何获取事件的textContent长度

selenium - 如何使用 cucumber runner 类运行多个功能文件?