首页 > 解决方案 > c# selenium 弹出窗口中的警报控件

问题描述

c# selenium 弹出窗口中的警报控件

如何控制弹出窗口警报中的控制?

popup window = window.open<br>

我尝试了几种方法,但最终都失败了。

测试代码 html 和 C#

索引.html

<button onclick="TEST();">TEST</button>
<div id="test">Wait</div>
<script>
  function TEST() {
    var win = window.open("test.html",
      "TEST",
      "location=no,width=600,height=500,status=no,resizable=yes,scrollbars=1,location=0"
    );

    win.focus();

    document.getElementById("test").innerText = "OK"; // << i want get text 
  }
</script>

测试.html

<script>
  alert("TEST");
  self.close();
</script>

C#

ChromeDriverService _driverService = ChromeDriverService.CreateDefaultService();
//_driverService.HideCommandPromptWindow = true;

ChromeOptions _options = new ChromeOptions();
//_options.AddArgument("headless");
//_options.AddArgument("no-sandbox");
//_options.AddArgument("disable-gpu");

ChromeDriver _driver = new ChromeDriver(_driverService, _options);
_driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(3);
_driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(3);
_driver.Navigate().GoToUrl(@"file:///C:\Users\root\Desktop\새 폴더 (4)\index.html");

IWebElement Element;
IAlert alert;

Element = _driver.FindElementByXPath("//button");
Element.Click();
// So far OK
// no control popup alert

// STEP 1 :: Error
if(false)
{
    alert = _driver.SwitchTo().Alert(); // << OpenQA.Selenium.NoAlertPresentException: 'no such alert  (Session info: chrome = 83.0.4103.97)'
    alert.Accept();
}

// STEP 2 : Error
if(false)
{
    _driver.SwitchTo().Window(_driver.WindowHandles.Last()); // << OK
    //_driver.Close(); // not working
    alert = _driver.SwitchTo().Alert(); // << OK
    alert.Accept(); // No Error No Run... I click directly. ok button in alert -> after error message  OpenQA.Selenium.NoSuchWindowException: 'no such window: target window already closed
    alert.SendKeys(OpenQA.Selenium.Keys.Return); // no run.. It is still at alert in popup window
    alert.Dismiss(); // no run.. It is still at alert in popup window
}

// STEP 3 : Error
//_driver.SwitchTo().ActiveElement().Click(); // timeout Error

// STEP 4 : Error
//WebDriverWait wait = new WebDriverWait(_driver, new TimeSpan(10));
//alert = wait.Until(ExpectedConditions.AlertIsPresent()); // timeout error
//alert.Accept();

我尝试了很多东西,但我无法控制 test.html。
我想在 popupwindow(test.html) 中控制关闭警报
但是,我想在不使用下面的情况下控制弹出窗口。

window.open hooking X       ex(window.open = function ...)
window.open xhr or fetch X    ex( fetch( popup url (test.html) )
winapi X                             ex( SendMessage WM_LBUTTONDOWN  or mouse_event )
alert hooking no time X        ex( alert = function....  However, since the popup floats immediately, there is no time to hook.)
i only popup alert control

有没有正常的弹窗控制方法?

标签: c#htmlseleniumcontrolspopupwindow

解决方案


推荐阅读