如何检查Selenium Python中的复选框是否已选中?

时间:2019-04-02 09:50:43

标签: python python-3.x selenium-webdriver

我正在尝试通过一种返回布尔值的方法来检查复选框的状态,但是在两种情况下(选中和未选中)它都返回false。

  <div class="order-status" id="orderStatus">
                        <div class="order-status-selector" data-toggle="collapse" data-target="#order-status-list">

                        </div>
                        <div class="inputGroup">
                            <input id="confirmed" name="radio" type="radio" checked>
                            <label for="confirmed" class="confirmed">confirmed</label>
                        </div>
                        <div class="collapse" id="order-status-list">
                            <div class="inputGroup">
                                <input id="new" name="radio" type="radio">
                                <label for="new" class="new">new</label>
                            </div>
                            <div class="inputGroup">
                                <input id="paid" name="radio" type="radio">
                                <label for="paid" class="paid">paid</label>
                            </div>
                            <div class="inputGroup">
                                <input id="shipped" name="radio" type="radio">
                                <label for="shipped" class="shipped">shipped</label>
                            </div>
                            <div class="inputGroup">
                                <input id="fulfilled" name="radio" type="radio">
                                <label for="fulfilled" class="fulfilled">fulfilled</label>
                            </div>
                            <div class="inputGroup">
                                <input id="return" name="radio" type="radio">
                                <label for="return" class="return">return</label>
                            </div>
                            <div class="inputGroup">
                                <input id="deleteOrder" name="radio" type="radio">
                                <label for="deleteOrder" class="deleteOrder">delete</label>
                            </div>
                        </div>
                    </div>

$("#orderStatus .inputGroup").click(function () {
        $('#orderStatus').prepend($(this));
        $('#order-status-list').collapse("hide");
    });

    $(".order-status-selector").click(function () {
        $(this).toggleClass('rotated');
    });

HTML

 def checkbox_status(self):
        checked=self.driver.find_element_by_xpath('//span[contains(text(), "Dell")]/parent::span').is_selected()
        return checked

4 个答案:

答案 0 :(得分:1)

我们可以尝试使用get属性。对我来说很好:

onSelectionChanged(event) {
  this.totalSelected = event.api.getSelectedNodes().length;
  gridOption.api.refreshHeader();
},

答案 1 :(得分:-1)

我使用is_displayed()而不是is_selected()来声明复选框的状态。一切正常。

def checkbox_status(self):
    checked=self.driver.find_element_by_xpath('//span[contains(text(), "Dell")]/parent::span/parent::label/input[@checked]').is_displayed()
    return checked

答案 2 :(得分:-1)

您可以使用is_selected方法来返回布尔值

要验证或获取选择状态,我们可以使用两种机制

1.driver.find_element_by_id("privacypolicy").is_selected();

如果选中此复选框,则返回“ true”;如果未选中,则返回false。

2.driver.find_element_by_id("privacypolicy").get_attribute("checked");

如果选中此复选框,则将返回“ true”。但是如果未选中该复选框,则将返回NoneType。

有关更多信息,请单击this链接。

答案 3 :(得分:-1)

问题是您的XPath指向SPAN而不是INPUTINPUT是此处的复选框。如果您将XPath切换为指向INPUT,它应该可以正常工作。

def checkbox_status(self):
    return self.driver.find_element_by_xpath('//input/following::span[.='Dell'][1]').is_selected()

XPath说明

//input/following::span[.='Dell'][1]
^ find an INPUT
       ^ that is followed by a SPAN
                       ^ that contains the text "Dell"
                                 ^ return only the nearest one

注意:我合并了两行代码,因为这里不需要将元素分配给变量,然后返回该变量。只需返回查找结果即可。


从关于我使用的XPath中的[1]的评论中回答DebanjanB的问题。这是一个简单的演示。我从HTML开始

<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
</ul>

如果我使用XPath //ul/li,它将返回所有3个LI。如果我在XPath中添加[1]来提供//ul/li[1],现在它仅返回最接近的LI。在向上或向下查看DOM时,这很有用。在某些情况下,这是没有必要的,因为您可以只使用.find_element()(单数),但是我发现在IE中这并不总是能按预期工作。我还没有完全测试并记录差异,但是我认为基本上是在某些浏览器中,如果位置不在XPath中,它将返回一个集合,其中第一个元素是最接近的元素,但是在IE中它将返回相同的元素集合,但第一个元素位于DOM的TOP而不是最接近的元素。在弄清楚了这个困难的方法之后,我开始将[1]放在XPath内,它似乎一直工作(至少在我维护的浏览器上)。

我使用的[1]position()的别名。您可以详细了解on MDN