Проблема
Я методом проб и ошибок заметил, что моя функция щелчка click
(код ниже) зависает в firefox в конкретном c случае. Что происходит, так это то, что я ввожу логин, нажимая кнопку входа в систему, а затем пытаюсь нажать кнопку профиля, сразу после которой зависает выполнение.
Насколько я понимаю, проблема заключается в том, что WebElement.click()
является функцией остановки и для по какой-то причине это не решается. Мое решение сейчас состоит в том, чтобы вместо этого сделать WebElement.sendKeys(Keys.ENTER)
вызов. Это работает, но я хотел бы знать, как я могу решить эту проблему, поскольку sendKeys
работает не во всех случаях. Пока это происходит только в firefox, у меня нет этой проблемы в chrome.
driver.manage().timeouts().pageLoadTimeout
, кажется, не имеет никакого значения.
Если я Thread.sleep
между двумя вызовами щелчка, тогда это также работает.
Выполнение
SeleniumCommands.click(driver, loginButton);
SeleniumCommands.click(driver, profilePage);
Ожидаемый результат
логин и go на страницу профиля.
Фактический результат
логин и селен зависают при втором driver.findElement(locator).click();
вызове.
Обходной путь
SeleniumCommands.click(driver, loginButton);
SeleniumCommands.click2(driver, profilePage);
Код
public static Boolean click(WebDriver driver, By locator, Integer... timeout) {
try {
waitFor(driver, ExpectedConditions.elementToBeClickable(locator), (timeout.length > 0 ? timeout[0] : null));
} catch (org.openqa.selenium.TimeoutException exception) {
return false;
}
// this sometimes hangs in firefox
driver.findElement(locator).click();
return true;
}
public static Boolean click2(WebDriver driver, By locator, Integer... timeout) {
try {
waitFor(driver, ExpectedConditions.elementToBeClickable(locator), (timeout.length > 0 ? timeout[0] : null));
} catch (org.openqa.selenium.TimeoutException exception) {
return false;
}
// This doesn't hang on firefox, but it can't always be used
driver.findElement(locator).sendKeys(Keys.ENTER);
return true;
}