C# - PhantomJS/Selenium - 单击事件不会在模态内的按钮上注册

本文关键字:模态 注册 按钮 PhantomJS Selenium 单击 事件 | 更新日期: 2023-09-27 18:36:11

我在C#中使用PhantomJS/Selenium WebDriver自动化网站时遇到了一些问题。

网站的一部分对地址进行了检查;输入一个它无法验证的地址(或者根本不输入地址)会弹出一个带有按钮的模态div。 根据情况,它将为您提供最近的地址,或者可以选择在没有地址的情况下继续,但按钮始终具有相同的 ID。 此div 的 HTML(对于"未输入地址"版本)在这里:

<div id="confirmAddress" class="col-xs-5 active-popupbox">
<div class="row vert-offset-top-2">
<p style="margin-left:55px;" class="h3">No Customer Address Provided</p>
<br>
<div style="margin-left:42px;margin-bottom:0px;" class="modal-body">No Customer Address Was Entered. We recommend having the Customer provide an address.</div>
<br>
<div class="col-xs-6">
<button type="submit" class="btn btn-default" style="margin-left:45px;width:200px;" id="confirmBack" name="confirmBack" align="center">Enter Address</button> &nbsp; </div>
<div class="col-xs-6">
<button type="submit" class="btn btn-default" id="confirmPopUp" name="confirmPopUp" align="center">Proceed with No Address</button>
</div>
</div>
</div>

我需要单击的按钮是最后一个按钮,<button type="submit" class="btn btn-default" id="confirmPopUp" name="confirmPopUp" align="center">Proceed with No Address</button>

但是,尽管似乎能够在我的代码中找到该元素并在其上调用 Click(),但抓取屏幕截图显示它显然没有注册单击,因为模态弹出窗口保留在页面上,并且由于找不到我要求它查找的元素,下一部分出错。

这是我代码的相关部分:

File.WriteAllText(@"C:'Users'user1'Documents'Testing'source0.html",
_driver.PageSource);
_driver.FindElementById("contactinfo_next").Click();
if (_driver.FindElementByClassName("active-popupbox").Displayed)
            {
                _driver.GetScreenshot().SaveAsFile(@"C:'users'user1'documents'testing'screenshot01.png", ImageFormat.Png);
                _driver.FindElementById("confirmPopUp").Click();
            }
            _driver.GetScreenshot().SaveAsFile(@"C:'users'user1'documents'testing'screenshot02.png", ImageFormat.Png);

我使用类名来查找div,因为它们显然具有不同的 id,具体取决于地址是"未提供"还是"无法验证但找到了接近的匹配",但类总是相同的。

我在单击"contactinfo_next"按钮之前让 PhantomJS 抓取源代码,这就是调出模态div 的原因,并且已经确认在单击contactinfo_next按钮之前不存在具有"active-popupbox"类的div。 "屏幕截图01.png"确实被保存,这意味着它正在查找div...但它仍然没有注册按钮单击。

我尝试单击div 中的其他元素以使其"聚焦",在按钮上调用 Click() 两次,将div 分配给一个名为div 的变量,然后使用 div.FindElements(By.Id("confirmPopUp")) 找到按钮并单击集合中的每个元素,没有任何效果。

还有其他人遇到过这个问题吗?

谢谢!

编辑:我为此使用以下NuGet包:

  • 幻影
  • Selenium WebDriver PhantomJS 跨平台
  • Selenium WebDriver 支持类
  • 硒网络驱动程序

C# - PhantomJS/Selenium - 单击事件不会在模态内的按钮上注册

好的,

所以我不知道这是否特定于我正在尝试自动化的这个站点,但是调整 PhantomJS 视口的大小有效 - 在我的屏幕截图中,模态的按钮相互重叠。 不知道为什么它很重要,但这就是最终解决我的问题的原因。 ¯''_(ツ)_/¯

要调整视口大小(需要系统绘制):

_driver.Manage().Window.Size = new Size(1920, 1080);

希望这对将来遇到类似问题的其他人有所帮助