无法选择 UI-Grid Selenium C# 中的所有项



我能够在UI-Grid中选择第一个复选框,并且一次选择所有项目或通过循环列表并不令人满意,但是当我调试代码并验证单击适用于列表中的所有项目时。

以下是相关的 HTML 代码:

//Html Code of Checkbox
<div class="ui-grid-selection-row-header-buttons ui-grid-icon-ok ng-scope"
     ng-class="{'ui-grid-row-selected': row.isSelected}" 
     ng-click="selectButtonClick(row, $event)" 
     role="button" 
     tabindex="0">&nbsp;</div>
//HTML Code of Button
<button class="dowbutton float_right ng-scope" 
        ng-if="technologyName != 'gtone' " ng-
        click="checkoutSelectedApplication()">Checkout/Update</button>

下面是我的代码,用于遍历列表并选择列表中的项目:

IList elements = driver.FindElements(
     By.XPath("//div[@ng-click='selectButtonClick(row, $event)']")).ToList();
int numberOfElements=elements.Count();
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.ElementToBeClickable(
     By.XPath("//div[@ng-click='selectButtonClick(row, $event)']"))).Click();

for (int i = 0; i < numberOfElements; i++)
{
    elements = driver.FindElements(By.XPath("//div[@ng-click='selectButtonClick(row, $event)']"));
    elements.ElementAt(i).Click();
}

单击复选框后,它不会触发任何事件。但是单击按钮后,它会发生。

我可以单击第一个复选框,

然后成功单击按钮,但无法继续单击第二个复选框和按钮

我的目标是单击第一个复选框,然后单击按钮,然后继续第二个复选框和按钮,依此类推。直到列表中所有复选框的末尾。

任何关于这些的帮助将不胜感激。

当您手动选中该复选框时,页面上是否发生了某些事情? 例如部分页面刷新/加载。如果是这样,您需要稍等片刻,然后再选中下一个复选框。

elements.ElementAt(i).Click();后睡眠 5 秒,如果睡眠正常,请尝试以下代码:

String cssSelector = "div[ng-click*='selectButtonClick']";
IList elements = driver.FindElements(By.CssSelector(cssSelector)).ToList();
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
int numberOfElements=elements.Count(); 
for (int i = 0; i < numberOfElements; i++)
{
    // click checkbox
    elements.ElementAt(i).Click();
    // click button
    driver.FindElement(
        By.CssSelector("button[ng-click*='checkoutSelectedApplication']")).Click();
    // wait page refresh/load complete  
    wait.Until(ExpectedConditions
             .ElementToBeClickable(By.CssSelector(cssSelector)));
    // find all checkbox again, because page changed,
    // otherwise report StaleReference
    elements = driver.FindElements(By.CssSelector(cssSelector));
}

最新更新