Selenium - 无法使用Python单击按钮

时间:2018-05-16 14:40:39

标签: python selenium

我遇到了一个问题,试图使用Selenium和Python点击我的Web应用程序上的特定按钮。该按钮显示在按下另一个按钮后可用的对话框上。

例如,我的表单包含以下部分:

enter image description here

按下“保存答案”按钮后,会在其上方的对话框中显示“确定”按钮。

enter image description here

我正在尝试点击此确定按钮,但它现在不能正常工作。 当我在Chrome上检查此元素时,我会收到以下内容:

<div class="bootbox modal fade my-modal in" tabindex="-1" role="dialog" style="display: block;">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<div class="bootbox-body">Your answers have been saved.</div>
</div>
<div class="modal-footer">
<button data-bb-handler="cancel" type="button" class="btn btn btn-primary">OK</button>
</div></div></div></div>

<button data-bb-handler="cancel" type="button" class="btn btn btn-primary">OK</button>是我要点击的按钮。

我正在使用以下Python代码来尝试:

driver.find_element_by_id("saveQuestionsSection").click() #click Save Answer
driver.find_element_by_xpath("//button[@type='button']").click() #click OK

但它不起作用。我尝试使用Selenium IDE复制此步骤,它在那里工作,命令如下所示:

命令:点击

目标:xpath=(//button[@type='button'])[26]

但我不知道如何将其转换为Python代码。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

使用CSS选择器。

find_element_by_css_selector(".btn").click()

答案 1 :(得分:1)

尝试等到模态窗口出现OK按钮:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver.find_element_by_id("saveQuestionsSection").click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[text()='OK']"))).click()

答案 2 :(得分:1)

试试这个:

driver.find_element_by_id("saveQuestionsSection").click() #click Save Answer
element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "button[text()='OK']"))  
element.click()

OR

driver.find_element_by_id("saveQuestionsSection").click() #click Save Answer
element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "(//button[@type='button'])[26]"))  
element.click()

答案 3 :(得分:0)

根据您提供的HTML,点击按钮,文字为确定,您可以使用以下代码行:

//imports
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
// other lines of code
driver.find_element_by_id("saveQuestionsSection").click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='bootbox modal fade my-modal in']//div[@class='modal-footer']/button[@class='btn btn btn-primary' and contains(.,'OK')]"))).click()