首页 > 解决方案 > 在表单 selenium + python 中提交按钮

问题描述

我有这个表单,其中包含一个具有一些动态值的按钮,当我单击它时,它应该将产品添加到结帐页面。这是html表单:

    {%for p in product %}
 <div class="single-product">
    <div class="product-f-image">
      <img src="data:image/png;base64,{{p.image_medium}}" alt="">
         <div class="">
       {% if not user.is_authenticated %}
      <form action="/login/">
       <button class="add-to-cart-link" type="submit"> Add to cart</button>
      </form>
      {%else%}
    <form id="form-id"  action="" method="POST">
    {% csrf_token %}
  <button class="add-to-cart-link" type="submit" name="product" value="{{p.id}}" >
<input type="hidden" name="product_name" value="{{p.name}}">
<input type="hidden" name="product_price" value="{{p.lst_price}}">
    Add to cart</button>
  </form>
     {%endif%}
 <a href="#" class="view-details-link"><i class="fa fa-link"></i> See details</a>
 </div>
  </div>
 <h2><a href="single-product.html">{{p.id}}</a></h2>
<div class="product-carousel-price">
 <ins>{{p.lst_price}} €&lt;/ins>
                                </div>

                            </div>
                            {%endfor%}

这是我对硒所做的事情:

bon_commande = self.selenium.find_element_by_xpath("//button[@name='product' and @value='37']/parent::form")
bon_commande.submit()

并感谢您的帮助!

标签: djangopython-3.xselenium

解决方案


您无需找到提交按钮即可提交表单 - 使用表单内的任何元素或form元素本身:

self.selenium.find_element_by_id("form-id").submit()

self.selenium.find_element_by_class_name("add-to-cart-link").submit()

更新

尝试等到 django 变量"{{p.id}}"被生成的值替换:

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.presence_of_element_located((By.XPATH, "//button[@name='product' and @value='37']"))).submit()

推荐阅读