尝试在复选框中添加勾号,但获取“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()。是否有另一种方法将勾号标记在复选框中?
答案 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();