当前位置: 首页 > 知识库问答 >
问题:

Selenium-无法单击模态中的元素

范飞翰
2023-03-14

我正在使用Selenium和java,我无法单击模态中的元素。场景是这样的:单击框架内的项目后,它会打开一个模态,我需要单击此模态中的一个元素,但我无法获得它。

我已经尝试过:

js.executeScript("document.getElementById('saveexit').scrollIntoView(true);");

我也尝试了用SwitchTo()这样做:

while (itr.hasNext()) {
    String popup =  itr.next();
    System.out.println("itr: " + popup);
    driver.switchTo().window(popup);
}

以下是我的modal的html:

<div class="modal-dialog">

    <div class="modal-content modal-custom-content">
        <div class="modal-header">
            ...
        </div>
        <div class="modal-body">
            <form id="formTo" class="form-container">
                <div class="row">
                    ...
                </div>
                <div class="small-space"></div>
                <input ...>
                <div class="row">
                    <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12">
                        ...
                    </div>
                    <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12">
                        ...
                    </div>
                </div>
                <div class="row">
                    <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12">
                        ...
                    </div>
                    <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12">
                        ...
                    </div>
                </div>
                <div class="small-space"></div>
                <div class="row"> 
                    ...
                </div> 
            </form> 
        </div>
        <div class="small-space"></div>
        <div class="modal-footer">
            <div class="row text-center"> 
                <div class="col-md-6 col-sm-6 col-xs-12">
                    <button class="btn modal-button full-btn" id="saveexit" type="button">SAVE AND EXIT</button>
                </div>
                <div class="col-md-6 col-sm-6 col-xs-12">
                    ...
                </div>
            </div>
        </div>
    </div>
</div>

这是来自firefox开发工具的CSS路径:

html.no-touch body div.remodal-wrapper.remodal-is-opened div.modaliAdesione.remodal.remodal-is-initialized.remodal-is‌​-opened div.modal-dialog div.modal-content.modal-custom-content div.modal-footer div.row.text-center div.col-md-6.col-sm-6.col-xs-12 button#saveexit.btn.modal-button.full-btn 

该对象永远找不到。

  • 问题1:如果一个元素在一个模态中,必须以不同的方式管理?
  • 问题2:如何最终让保存退出按钮的点击工作?

以下是html的代码片段:https://codeshare.io/arLW9q

以下是java代码:

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"saveexit\"]")))

我也尝试过:

cssSelector: #saveexit
cssPath: html.no-touch body div.remodal-wrapper.remodal-is-opened div.modaliAdesione.remodal.remodal-is-initialized.remodal-is-opened 
div.modal-dialog div.modal-content.modal-custom-content div.modal-footer div.row.text-center div.col-md-6.col-sm-6.col-xs-12 
button#saveexit.btn.modal-button.full-btn
xpath: //*[@id="saveexit"]

请注意:如果我从浏览器的控制台运行document.getElementById('saveexport'). Click();它的工作原理

共有2个答案

宋望
2023-03-14

我在脚本中使用jquery修复了它;

以下是线路代码:

js。executeScript(“$('#saveexit')。触发器('click');”

我希望它能在将来帮助别人。

我不知道为什么纯javascript不起作用。。。

艾宏远
2023-03-14

根据最佳实践,当您使用Selenium Java客户机时,首先必须尝试调用高效且经验证的click()方法。根据单击方法产生的错误,我们可以使用其他替代解决方案。

正如我从您对JavascriptExecutor和switchTo()的代码测试中所看到的。window(),您没有很好地识别表示保存和退出按钮的Web元素。

要单击“保存并退出”按钮,可以使用以下代码块:

new WebDriverWait(driver, 5).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='modal-dialog']//div[@class='modal-footer']//button[@class='btn modal-button full-btn' and @id='saveexit']"))).click();
 类似资料:
  • 问题内容: 我正在使用Selenium和Java,无法单击模式内的元素。场景是这样的:单击框架内的项目后,它会打开一个模态,我需要单击此模态内的一个元素,但我无法获取它。 我已经尝试过: 我也尝试过使用switchTo()这样: 这是我的模态的HTML: 这是从firefox开发工具获取的CSS路径: 永远找不到对象。 问题1:如果元素在模态内部必须进行不同的管理? 问题2:如何最后单击按钮 sa

  • 问题内容: 我正在使用Selenium和Java,无法单击模式内的元素。场景是这样的:单击框架内的项目后,它会打开一个模态,我需要单击此模态内的一个元素,但我无法获取它。 我已经尝试过: 我也尝试过使用switchTo(): 这是我的模态的HTML: 这是从firefox开发工具获取的CSS路径: 永远找不到该对象。 问题1:是否必须对模态中的元素进行不同的管理? 问题2:如何最后单击按钮 sav

  • 我们已经更新到最新的Selenium版本3.141.59并且发现点击不起作用。我没有得到一个错误消息,表明单击失败,并移动到下一个函数或行。我已经验证了它在Chrome、Firefox和Edge上不起作用。我们的代码是用Java编写的。 在单击元素之前添加等待时间 操作 JavaScriptExecutor 如有任何帮助,我们将不胜感激!

  • 我知道我必须切换到一个iframe当我想要点击和元素在它里面。iFrame的开头是这样的: 我使用切换到它 然后,我尝试单击Iframe中的“Join”按钮,使用它的XPath: 在一张桌子里面。 我可以选择“以前的会议”选项卡,但不能使用加入或邀请按钮。 这两个图像只是一个接着一个。

  • 我试图刮掉一个页面,但我有时无法点击链接/按钮。 当网页加载时,那么loadingWhiteBox会先出现,然后在几秒钟后消失(但它会保留在超文本标记语言代码中),只要该框出现在网站上,我就不能点击链接并获得以下内容错误消息: 有什么办法解决这个问题吗?我已经尝试使用以下命令: 但即使元素不处于活动状态,它也存在。

  • 我正在学习使用Java和Eclipse IDE的Selenium测试自动化。我正在尝试开发自己的XPAHT,但我在浏览器上安装了Chropath来帮助解决我自己无法解决的问题。在尝试与play按钮交互时,我遇到了以下问题几次。测试的目标是导航到网站的播客页面,选择一个播客,点击播放按钮。我尝试开发自己的xpath,但没有找到任何工作的xpath。我检查了Chropath插件,得到了这样的消息: 它