【问题标题】:Unable to find elements in modal popup using selenium [duplicate]无法使用硒在模式弹出窗口中找到元素[重复]
【发布时间】:2017-08-24 05:37:24
【问题描述】:

我需要确认一个模式弹出窗口。我有一个我填写的表格,必须移到下一页。当我点击继续时,会出现一个模式弹出窗口,询问填写的详细信息是否正确?

上面有两个按钮和一些其他的描述。一个按钮显示取消,另一个显示Yes, information is correct. 我尝试通过

切换到模态元素
driver.switchTo().frame(0);  // there is only one popup

但是,之后我对webDriver 所做的任何事情都会导致NullPointerException,因为没有找到网络元素。

这是我正在尝试的

WebElement modalButtonContainer = AutoUtils.findElementByClassName(modalOverlay, "modalButtonContainer");
WebElement modalButton = AutoUtils.findElementByClassName(modalButtonContainer, "buttonClass");
modalButton.click();

但这一切都导致NullPointer。如何点击modalButton

【问题讨论】:

  • 分享网站网址。

标签: java selenium modal-dialog webdriver


【解决方案1】:

如果我没记错的话 driver.switchTo().frame(0); 切换到 <iframe> 元素。在这里,您谈论的是popup。这又取决于,如果这是使用javascript:alert('popup') 或类似调用的典型JavaScript 弹出窗口,那么

Alert alert = driver.switchTo().alert();
alert.accept();

是要走的路。否则,如果它是一些引导弹出窗口,那么你根本不需要任何切换,也许只是一些 FluentWait

(如果不起作用,请分享 DOM)

【讨论】:

  • 这不是警报。已经尝试过,它给出了“没有警报存在”异常。
  • 你试过NO SWITCHING吗?在modalButton.click();之前临时添加(!)Thread.sleep(2000)进行测试
  • 是的。没有 Switchin 似乎有帮助。
  • 很高兴听到。祝你考试顺利!
【解决方案2】:

由于弹出窗口有两个按钮,如果两个按钮类名相同('buttonClass')

最好尝试使用带有名称或其他唯一属性的其他定位器来识别按钮。

WebElement modalButtonContainer = AutoUtils.findElementByClassName(modalOverlay, "modalButtonContainer");
WebElement modalButton = AutoUtils.findElementByName(modalButtonContainer, "Cancel");
                       (or)
WebElement modalButton = AutoUtils.findElementByName(modalButtonContainer, "Yes, information is correct.");
modalButton.click();

【讨论】:

    【解决方案3】:

    NullPointerException 不代表element not found。这意味着您正在尝试访问尚未初始化的对象。检查您的堆栈跟踪。它会向您显示一条确切的行,您尝试在其中访问未初始化的对象。它可能是您正在与之交互的页面对象或 Web 元素。当您检测到问题时,请验证是否使用了 new 运算符。或者,如果您使用的是PageFactory,请不要忘记致电initElements

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-04
      • 2019-10-02
      • 1970-01-01
      • 2019-04-01
      • 2020-04-20
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      相关资源
      最近更新 更多