Selenium:无法勾选复选框

时间:2018-01-19 19:07:54

标签: c# selenium

尝试在复选框中添加勾号,但获取“OpenQA.Selenium.ElementNotVisibleException”异常。

DOM(每行有多行和一个复选框):

<td style="text-align:center">
    <input type="checkbox" id="chk_divAccountsGrid_37193" class="k-checkbox">
    <label for="chk_divAccountsGrid_37193" class="k-checkbox-label">
      ::before
  </label>
</td>

测试代码:

driver.FindElements(By.XPath("//label[starts-with(@for, 'chk_divAccountsGrid')]"))[1].Click();

driver.FindElements(By.CssSelector("[id^='chk_divAccountsGrid']"))[1].Click();

输入的维度为0x16,标签的维度为18x0,但':: before'的维度为16x16,但不知道如何对其执行click()。是否有另一种方法将勾号标记在复选框中?

3 个答案:

答案 0 :(得分:1)

因为复选框和标签的宽度或高度为0,所以我们可以认为它们的大小为0.当元素大小为零时,用户无法在页面上看到它,selenium api模拟用户体验,它会抛出{{1使其接近用户体验。

要解决您的问题,您不能使用selenium ElementNotVisibleException来操作前端元素,而是使用selenium click()注入并执行javascript代码段以从后端操作元素。

executeScript()

答案 1 :(得分:0)

根据我的经验,这通常是由于当驱动程序尝试单击该框时页面尚未完全加载。我会用以下内容识别元素:

[FindsBy(How.How=XPath, Using="//label[starts-with(@for, 'chk_divAccountsGrid')]")] 
public IWebElement chkAccountsGrid {get;set;}

然后尝试按如下方式单击它:

    // Click Checkbox
    public void ClickCheckbox(IWebElement element)
    {
        WaitUntilClickable(element, 10);
        element.Click();
        // element.SendKeys(Space);
        // element.SendKeys(Enter); 
        Console.WriteLine( element + " Clicked");
    }

    // Wait Until Clickable
    public static void WaitUntilClickable(IWebElement elementLocator, int timeout)
    {
        try
        {
            WebDriverWait waitForElement = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
            waitForElement.Until(ExpectedConditions.ElementToBeClickable(elementLocator));
        }
        catch (NoSuchElementException)
        {
            Console.WriteLine("Element: '"+element+"' was not found in current context page.");
            throw;
        }
    }

答案 2 :(得分:0)

<label>代码不会接受click(),但会<input>代码。要根据给定的HTML在复选框中添加勾号,您可以使用以下代码行:

driver.FindElement(By.XPath("//input[@class='k-checkbox' and starts-with(@id,'chk_divAccountsGrid_')]")).Click();