我能够在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"> </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));
}