【问题标题】:Django Selenium click button on ajax modal pop-up windowajax模式弹出窗口上的Django Selenium单击按钮
【发布时间】:2018-04-19 21:42:21
【问题描述】:

我目前正在为我的大学做一些任务。我正在为我的应用程序编写 Django Selenium 测试。我正在尝试编写删除对象的测​​试。

我的代码的关键部分是:

删除确认.html

<form action="" method="post" id="confirmForm">{% csrf_token %}
    <p>{% trans "Are you sure you want to delete this car?" %}</p>
    <input class="center-block btn btn-danger" type="submit" value="{% trans 'Confirm' %}"/>
</form>

modal.js

function showModal(url) {
    $("#myModalBody").text();
    $("#myModal").modal();
    $.ajax({
        url,
        cache: false
    }).done(function (html) {
        $("#myModalBody").html(html);
        $("#confirmForm").attr('action', url);
    });

}

当我点击以下按钮时

<button class="btn btn-primary btn-sm pull-left" value="" id="car-delete-modal-btn m-10-b" onclick="showModal('{% url 'c2crental:delete_car' details_car.id %}');">{% trans "Delete car" %}</button>

Modal appears

测试停止并显示结果:无法定位元素。我试图使用不同的选择器,但它们都不起作用。现在测试看起来像这样:

# click 'delete' button to display popup confirmation window
delete_btn = self.selenium.find_element_by_id('car-delete-modal-btn m-10-b')
delete_btn.click()

# click 'confirm' to delete object in popup window
submit = 'input[type="submit"]'
confirm_btn = self.selenium.find_element_by_id(submit)
confirm_btn.click()

我似乎无法为该按钮找到合适的选择器,或者这是同步问题。有人可以帮我解决吗?

对不起,我的英语不好,我希望你能理解我在这里想要做什么,但我只是从 Django 开始,测试,一般的编程,所以并不是一切都清楚。

【问题讨论】:

    标签: python django selenium selenium-webdriver modal-dialog


    【解决方案1】:

    @PixelEinstein 的答案是正确的方向但是我想 WebDriverWait超时 因为节点 input[@type="submit"] 不是 [@id="confirmForm"] 的直接子节点.

    也许,您可以使用以下 Locator Strategy 诱导 WebDriverWait

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    WebDriverWait(self.selenium, 10).until(EC.element_to_be_clickable((By.XPATH, "//form[@id='confirmForm']//input[@class='center-block btn btn-danger']"))).click()
    #or
    WebDriverWait(self.selenium, 10).until(EC.element_to_be_clickable((By.XPATH, "//form[@id='confirmForm']//input[@class='center-block btn btn-danger']"))).submit()
    

    【讨论】:

      【解决方案2】:

      这些行导致您的问题:

      submit = 'input[type="submit"]'
      confirm_btn = self.selenium.find_element_by_id(submit)
      

      您正在尝试将 CSS 传递给 id 选择器。

      我会尝试在点击提交之前添加这个:

      # Make sure to import these first
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      
      WebDriverWait(self.selenium, 10).until(EC.element_to_be_clickable((By.XPATH, './/*[@id="confirmForm"]//input[@type="submit"]'))
      

      然后试试这个点击而不是idXPATH

      self.selenium.find_element_by_xpath('.//*[@id="confirmForm"]//input[@type="submit"]').click()
      

      【讨论】:

        猜你喜欢
        • 2021-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-14
        相关资源
        最近更新 更多