Как проверить все флажки? Пытаюсь проверить все флажки, пройти тесты, но визуально я не вижу, чтобы они были проверены - PullRequest
1 голос
/ 21 января 2020
@Test
public void checkAllFilters() throws InterruptedException {
    couponSearchPage.navigateToAvailableCoupons();
    couponSearchPage.refineBarClick();
    driver.findElement(By.name("group1")).isDisplayed();
    WebElement checkBoxList = driver.findElement(By.name("group1"));
    System.out.println("Is checkbox displayed? " + checkBoxList.isDisplayed());

    List<WebElement> checkBoxFiltersList = driver.findElements(By.xpath("//div[@class='c -checkbox']//following:: input[@type='checkbox']"));
    for(WebElement checkBox : checkBoxFiltersList){
        Thread.sleep(2000);
        checkBox.click();
        Thread.sleep(2000);
        //mainPage.ajaxClick(checkBox);
    }
    // Assert if any checkbox left checked
    List<WebElement> allCheckboxList = driver.findElements(By.xpath("//div[@class='c-checkbox']//following:: input[@type='checkbox']"));
    if(!allCheckboxList.isEmpty()){
        Assert.fail();
    }

}

Попытка установить все флажки на странице, но она не проверяется, даже если тест пройден. Xpth неверен или мне нужен ajaxClcick?

<div class="c-checkbox">
     <input type="checkbox" id="Baby &amp; ChildCare" class="c-settings-form__filter-checkbox c-checkbox__input js-update-filter" name="filter-Baby &amp; ChildCare" value="Baby &amp; ChildCare">
     <label for="Baby &amp; ChildCare" class="c-checkbox__label"><span></span>Baby &amp; ChildCare</label>
</div>

1 Ответ

0 голосов
/ 21 января 2020

Нажмите на элемент label, а не на input.

List<WebElement> checkBoxFiltersList = driver.findElements(By.xpath("//div[@class='c-checkbox']//label"));

Также с локатором, который вы используете, чтобы установить флажки неправильно, используйте:

  • xpath: //div[@class='c-checkbox']//input[@checked='true']
  • css: .c-checkbox input[checked='true']

Также измените Assert на правильную проверку, если все флажки установлены:

Assert.assertEquals(driver.findElements(By.cssSelector(".c-checkbox input[checked='true']")).size(), 
            checkBoxFiltersList.size());

Обновление , код с другими утверждениями, например:

WebDriverWait wait = new WebDriverWait(driver, 10);

driver.findElement(By.cssSelector(".c-sort-filter")).click();

List<WebElement> checkboxes = wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector(".c-checkbox label")));
List<String> labels = checkboxes.stream().map(WebElement::getText).collect(Collectors.toList());

for (String label: labels) {
    driver.findElement(By.cssSelector(String.format("label[for='%s']", label))).click();
    // wait until loading disappear
    wait.until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector(".c-spinner")));

    // check if input is selected
    wait.until(ExpectedConditions.elementToBeSelected(By.cssSelector(String.format("input[id='%s']", label))));
}

// check if input is selected by compare tags with checkboxes
List<String> selectedFilters = driver.findElements(By.cssSelector(".divider-view-filters-list .c-xbubble")).stream().map(WebElement::getText).collect(Collectors.toList());
Assert.assertEquals(selectedFilters, labels);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...