【问题标题】:Unable to click on dynamic generating checkbox无法点击动态生成复选框
【发布时间】:2018-07-24 23:48:08
【问题描述】:

我有一个生成动态复选框的表格,如下所示:

<div style="background: #fff;">
                    <div class="modal-body">
                        <table class="table no-margin">
                            <thead>
                                <tr>
                                    <th>Select</th>
                                    <th>Group Name</th>
                                    <th>Contacts</th>
                                </tr>
                            </thead>
                            <tbody>
                                
                                        <tr>
                                            <td>
                                                <div class="checkbox checkbox-styled">
                                                    <label>
                                                        <input type="checkbox" class="datacontact" onchange="SelectContacts(this);" data-listid='1' data-grpname='Newsletter' />
                                                    </label>
                                                </div>
                                            </td>
                                            <td>Newsletter</td>
                                            <td>0</td>
                                        </tr>
                                    
                                        <tr>
                                            <td>
                                                <div class="checkbox checkbox-styled">
                                                    <label>
                                                        <input type="checkbox" class="datacontact" onchange="SelectContacts(this);" data-listid='2' data-grpname='Website Leads Buyer' />
                                                    </label>
                                                </div>
                                            </td>
                                            <td>Website Leads Buyer</td>
                                            <td>0</td>
                                        </tr>
                                    
                                        <tr>
                                            <td>
                                                <div class="checkbox checkbox-styled">
                                                    <label>
                                                        <input type="checkbox" class="datacontact" onchange="SelectContacts(this);" data-listid='3' data-grpname='Website Leads Seller' />
                                                    </label>
                                                </div>
                                            </td>
                                            <td>Website Leads Seller</td>
                                            <td>2</td>
                                        </tr>
                                    
                                        <tr>
                                            <td>
                                                <div class="checkbox checkbox-styled">
                                                    <label>
                                                        <input type="checkbox" class="datacontact" onchange="SelectContacts(this);" data-listid='4' data-grpname='Website Leads Investor' />
                                                    </label>
                                                </div>
                                            </td>
                                            <td>Website Leads Investor</td>
                                            <td>0</td>
                                        </tr>
                                    
                                        <tr>
                                            <td>
                                                <div class="checkbox checkbox-styled">
                                                    <label>
                                                        <input type="checkbox" class="datacontact" onchange="SelectContacts(this);" data-listid='5' data-grpname='Website Leads' />
                                                    </label>
                                                </div>
                                            </td>
                                            <td>Website Leads</td>
                                            <td>0</td>
                                        </tr>
                                    
                                        <tr>
                                            <td>
                                                <div class="checkbox checkbox-styled">
                                                    <label>
                                                        <input type="checkbox" class="datacontact" onchange="SelectContacts(this);" data-listid='7980' data-grpname='NewGroup1' />
                                                    </label>
                                                </div>
                                            </td>
                                            <td>NewGroup1</td>
                                            <td>0</td>
                                        </tr>
                                    
                                        <tr>
                                            <td>
                                                <div class="checkbox checkbox-styled">
                                                    <label>
                                                        <input type="checkbox" class="datacontact" onchange="SelectContacts(this);" data-listid='7996' data-grpname='My Group' />
                                                    </label>
                                                </div>
                                            </td>
                                            <td>My Group</td>
                                            <td>0</td>
                                        </tr>
                                    
                                        <tr>
                                            <td>
                                                <div class="checkbox checkbox-styled">
                                                    <label>
                                                        <input type="checkbox" class="datacontact" onchange="SelectContacts(this);" data-listid='9136' data-grpname='Email Functionality ' />
                                                    </label>
                                                </div>
                                            </td>
                                            <td>Email Functionality </td>
                                            <td>0</td>
                                        </tr>
                                    
                            </tbody>
                        </table>                        
                    </div>
                    <div class="modal-footer">
                        <button type="button" data-dismiss="modal" class="btn btn-flat btn-default-dark ink-reaction">OK</button>
                        <button type="button" data-dismiss="modal" class="btn btn-flat btn-default-dark ink-reaction">Cancel</button>
                    </div>
                </div>
            </div>
        </div>
    </div>

通过下面提到的代码,我获得了名为“网站销售商”复选框的价值

package TestScripts;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.WebElement;

//import com.sun.xml.internal.bind.v2.schemagen.xmlschema.List;

public class EmailClient_VerifyEmail {

    public static void main(String[] args) {
        System.setProperty("webdriver.gecko.driver", "C:/geckodriver/geckodriver-v0.21.0-win64/geckodriver.exe");

        WebDriver driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
        driver.get("http://cp.iagentsolutions.com/login.aspx");

        //enter email id
        driver.findElement(By.cssSelector("#txtuserName")).sendKeys("abdul123");

        //enter password
        driver.findElement(By.cssSelector("#txtPassword")).sendKeys("admin123");

        // click on login
        driver.findElement(By.cssSelector("#LoginSnd")).click();

        System.out.println("User Login Successfully from CP");

        //hover on menu
        //driver.findElement(By.xpath("html body.menubar-hoverable.header-fixed.menubar-visible form#form1 div#base div#menubar.menubar-inverse.animate div.nano.has-scrollbar div.nano-content div.menubar-scroll-panel ul#main-menu.gui-controls"))
        Actions action = new Actions(driver);

        //WebElement element = 
        action.moveToElement(driver.findElement(By.cssSelector(".menubar-foot-panel"))).perform();//("html body.menubar-hoverable.header-fixed.menubar-visible form#form1 div#base div#menubar.menubar-inverse.animate div.nano.has-scrollbar div.nano-content div.menubar-scroll-panel ul#main-menu.gui-controls")));

        //click on Email Client menu for open sub-menus
        driver.findElement(By.xpath("/html/body/form/div[3]/div[2]/div[2]/div[1]/div/ul/li[7]/a/span")).click();
        driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);        
        // click on Create Email
        driver.findElement(By.xpath("/html/body/form/div[3]/div[2]/div[2]/div[1]/div/ul/li[7]/ul/li[1]/a/span")).click();

        //Enter draft name
        driver.findElement(By.name("ctl00$body$txtDraftName")).sendKeys("Try to send without verify email");

        //Click on Next button
        driver.findElement(By.name("ctl00$body$btnStep1Next")).click();

        //Email Settings
        // Enter subject
        driver.findElement(By.id("body_txtSubject")).sendKeys("Try to send without verify email");
        driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);

        //Click on Add / Edit to open Contact List
        driver.findElement(By.linkText("Add / Edit")).click();
        driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);

        driver.findElements(By.xpath("//input[@type='checkbox' and @class='datacontact']")).forEach(elelemnt -> {
            elelemnt.click();
        });     

    }

}

但此代码仅用于获取复选框标题,而不是单击复选框。

【问题讨论】:

    标签: java firefox selenium-webdriver


    【解决方案1】:

    我已经测试过了,它工作正常: 使用下面的代码:

    driver.findElements(By.xpath("//input[@type='checkbox' and @class='datacontact']")).forEach(element -> {
            if (element.getAttribute("data-grpname").trim().equals("Website Leads Seller")) {
                ((JavascriptExecutor) driver).executeScript("arguments[0].click();", element);
            }
        });
    

    【讨论】:

    • 我已经尝试过你的代码,它没有任何更新就可以正常工作。可能是点击问题不起作用。尝试调试代码是否进入。
    • 我已添加代码以使用 javascript 点击。如果这也不起作用,那么您可以使用 Actions 类单击元素。
    • 当我尝试调试我的脚本时,我收到了这个错误,“找不到源,源附件不包含文件 RemoteWebDriver.class 的源。
    • 您放在这里的代码没有任何问题,它在其他地方。请用全班更新您的帖子,以便我们找出问题所在。另外,您在哪一行收到此错误。您可以提供错误堆栈跟踪。
    • 我已经更新了我的帖子,并且在“driver.findElements(By.xpath("//input[@type='checkbox' and @class='datacontact']”这一行收到错误消息)).forEach(elelemnt -> {"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    相关资源
    最近更新 更多