【问题标题】:How shall I select a particular checkbox having ::before tag?如何选择具有 ::before 标签的特定复选框?
【发布时间】:2020-10-13 09:16:11
【问题描述】:

我无法检查表中存在的复选框并具有 ::before 标记,硒总是返回“元素不可见”错误。尝试将等待隐式和显式放置,但它对操作类(元素列表)都没有帮助。请帮助我从复选框列表中选择一个特定的复选框,所有复选框在 HTML Dom 中都有 ::before 标记。

我正在使用下面的 xpath,用于 div 数据表中存在的复选框:

//label[@for='myCheckboxrCustom']);

我正在使用 for 循环并将费用类型和业务目的的值存储在字符串中,然后将这些存储的值与预期值进行比较,当这些值匹配时,我使用 if 条件来选择复选框。但是,我收到“元素不可见”错误。

我也尝试过使用动作类移动到特定的复选框,然后检查它,但它只适用于表中的第一个复选框,而不是第二个复选框。好像我写的动作类不适用于元素列表

我正在使用 java 选择第二个复选框,费用类型为 Meals。

以下是 HTML:

<div class="col-12 scrolling pend active" style="width: 100%;">
    <div class="title-table">   
        <div class="select">                       
            <input id="check-all" class="check-all" type="checkbox" autocomplete="on">
                <label for="check-all">
                    ::before
                </label>                      
        </div>      
        <div class="expense-type">Expense Type</div>        
        <div class="bus-purpose">Business Purpose</div>
    </div>    
    <div class="data-table ExpenseTransactionsDiv" referencetype="Actual" expdetailid="162341">
        <div class="select" data-title="Select: ">
            <input type="checkbox" id="myCheckboxr" name="chkExpenseDetailID" class="chkbox" value="162341" autocomplete="on">
                <label for="myCheckboxrCustom">
                    ::before
                </label>
        </div>
        <div class="expense-type" data-title="Expense Type">Meals</div>
        <div class="bus-purpose" data-title="Business Purpose">TC_4631</div>        
    </div>                           
    <div class="data-table ExpenseTransactionsDiv" referencetype="Actual" expdetailid="162337">
        <div class="select" data-title="Select: ">
            <input type="checkbox" id="myCheckboxr" name="chkExpenseDetailID" class="chkbox" value="162337" autocomplete="on">
            <label for="myCheckboxrCustom">
                ::before
            </label>
        </div>
        <div class="expense-type" data-title="Expense Type">Hotel</div>              
        <div class="bus-purpose" data-title="Business Purpose">TC_4631</div>
    </div>
</div> 
```  


【问题讨论】:

  • 有3个复选框,你要点击哪一个?
  • 第二个费用类型为膳食
  • 您使用哪种语言? Java/Python/C#?
  • 我是java用户
  • 你能用所有这些附加信息更新主要问题吗?

标签: java html selenium xpath checkboxlist


【解决方案1】:

我在您的示例中使用了下面的代码,并且能够选中我想要的框。

self.driver.find_element_by_xpath('//*[@id="myCheckboxr"]').click()

你需要点击输入而不是标签元素。

【讨论】:

  • 这个也试过了,还是元素不可见错误
  • 哦,我的答案是针对 python 而不是 java
【解决方案2】:

显然等待和操作类组合解决了这个问题:

List <WebElement> selectCheckbox = driver.findElements(By.xpath("//label[@for='myCheckboxrCustom"));
Actions actions = new Actions(driver);
        actions.moveToElement(selectCheckbox ).click(selectCheckbox ).actions.build().perform(); 

感谢大家的意见

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多