c# - 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
有没有正常的弹窗控制方法?
解决方案
推荐阅读
- html - 在 CSS 中选择仅包含数字的列
- javascript - 用于 Django Ajax 表单提交的 For 循环
- laravel - 让我的切换在 laravel livewire 中正确显示
- java - 如何在 Java 中使用泛型集对象
- mysql - 将 2012 年 6 月 1 日的 varchar 转换为日期
- python - python opencv中图像的批处理不起作用
- c# - C# Keydown 为什么消息框显示两次?
- java-8 - Log4j 中的每周 RollingFileAppender
- python - (vsc) 每个 python 命令都打印 Python
- sql - 查询以获取 epoch_timestamp 之间的结果