Второй флажок игнорируется - PullRequest
0 голосов
/ 28 мая 2018

Следующий код игнорирует второй щелчок флажка.Кто-нибудь знает почему и как решить?Установите точку останова в последней строке, чтобы увидеть, что флажок все еще установлен ...

private final static String CHECKBOXBUTTON_URL = "https://www.w3schools.com/html/tryit.asp?filename=tryhtml_Checkbox";
private final static String RESULT_IFRAME = "iframeResult";
private final static By CHECKBOX = By.xpath("/html/body/form/input[2]");

@Test
public void checkbox()
{
    System.setProperty("webdriver.edge.driver", "MicrosoftWebDriver.exe");
    WebDriver driver = new EdgeDriver();
    FluentWait<WebDriver> wait = new WebDriverWait(driver, 0);
    driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
    wait.withTimeout(Duration.ofSeconds(10)).pollingEvery(Duration.ofMillis(200));

    driver.get(CHECKBOXBUTTON_URL);
    wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(RESULT_IFRAME));

    driver.findElement(CHECKBOX).click();
    wait.until(ExpectedConditions.elementToBeSelected(CHECKBOX));

    driver.findElement(CHECKBOX).click(); // this click is ignored

    driver.quit(); // break here; checkbox is still checked (but shouldn't)...
}

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

Это игнорируется из-за интервала времени анимации браузера для отображения флажка в поле.

driver.findElement(CHECKBOX).click();
wait.until(ExpectedConditions.elementToBeSelected(CHECKBOX));
//Something can be coded here    
driver.findElement(CHECKBOX).click(); // this click is ignored

Вы можете выбрать любое из следующих двух утверждений.

  1. Добавить жесткое ожидание на 1 или 2 секунды.Используйте Thread.sleep(2000).Это должно разрешить переходную анимацию.

  2. Используйте метод isSelected() на целевом флажке, чтобы определить, действительно ли он выбран или нет.Метод возвращает true, если выбран, и false в противном случае.

0 голосов
/ 28 мая 2018

Вы можете переключить фрейм с помощью индекса и перейти к второму фрейму, используя его, затем выполнить действие над флажком.

private final static String CHECKBOXBUTTON_URL = "https://www.w3schools.com/html/tryit.asp?filename=tryhtml_Checkbox";
private final static By CHECKBOX = By.xpath("//input[@name='vehicle' and @value='Car']");

@Test
public void checkbox()
{
    System.setProperty("webdriver.edge.driver", "MicrosoftWebDriver.exe");
    WebDriver driver = new EdgeDriver();
    FluentWait<WebDriver> wait = new WebDriverWait(driver, 0);
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.switchTo().frame(1); 
    //   new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("iframeResult"));
     WebElement element=driver.findElement(By.xpath("//input[@name='vehicle' and @value='Car']"));
    element.click();
    wait.until(ExpectedConditions.elementToBeSelected(element));
    element.click();
}

    driver.quit(); // break here; checkbox is still checked (but shouldn't)...
}
0 голосов
/ 28 мая 2018

Вам необходимо позаботиться о нескольких фактах:

  • FluentWait : вместо FluentWait<WebDriver> использовать WebDriverWait(), специализированная специализация FluentWait , которая использует WebDriver экземпляров, до тех пор, пока это не станет абсолютно необходимым.

  • Вам необходимо настроить WebDriverWait с желаемым значением interms timeOutInSeconds например, 5, 10, 15, но не 0 .

  • pageLoadTimeout () : Старайтесь избегать конфигурирования pageLoadTimeout() до тех пор, пока в спецификации теста не будет явно указано то же самое.

  • Как только вы switch() перейдете к нужному кадру вместо ExpectedConditions, как elementToBeSelected(), дождитесь elementToBeClickable() следующим образом:

    new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@name='vehicle' and @value='Car']"))).click();
    
  • Ваш оптимизированный кодовый блок выглядит следующим образом:

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    public class Checkbox_Click {
    
        public static void main(String[] args) {
    
            System.setProperty("webdriver.gecko.driver", "C:\\path\\to\\geckodriver.exe");
            WebDriver driver = new FirefoxDriver();
            driver.get("https://www.w3schools.com/html/tryit.asp?filename=tryhtml_Checkbox");
            new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("iframeResult"));
            new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@name='vehicle' and @value='Car']"))).click();
        }
    }
    
  • Снимок браузера:

Browser_Snap_Second_Select

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...