2016-12-13 7 views
1
  1. Мне нужно дождаться, пока загрузится всплывающее оверлей страницы, прежде чем прокручивать соответствующий веб-элемент.Webdriver: Подождите, пока PagetoLoad, а затем прокрутите до элемента

  2. Следующий код, приведенный ниже, является успешным при поиске и прокрутке веб-элемента, но я хочу избежать Thread.sleep.

    public void scrollToElementByLocator(WebElement element) throws InterruptedException { 
    
    Thread.sleep(4000); 
    ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", element); 
    
    ((JavascriptExecutor) driver).executeScript("window.scrollBy(0, -400)"); 
    

3. Может ли кто-нибудь советы по другому методу ждать загрузки страницы, а затем перейдите к желаемому webelement без использования Thread.Sleep?

enter image description here

Большое спасибо за вашу помощь

+0

Попробуйте 'клик()' на любом элементе пока страница загружается. Вы должны получить исключение, что-то вроде «элемент не кликабельен в точке ... другой элемент получил щелчок ...» Покажите часть исключения с «HTML» элемента, который фактически получил клик (модальное окно, которое накладывает ваши целевой элемент) – Andersson

+0

Ниже ссылка будет работать для ваших нужд http: // stackoverflow.com/questions/15122864/selenium-wait-until-document-is-ready – Gobi

ответ

1

Это боль. В идеале у вас будет доступ к разработчикам, и они могут сказать вам, какие элементы появляются/исчезают, что вы можете ждать. В этом случае я предполагаю, что у вас нет доступа к ним.

Что я пытаюсь сделать, это вызвать действие, быстро щелкнуть правой кнопкой мыши и выбрать элемент «Проверить» и посмотреть, какие элементы появляются. Если вам повезет, диалог и т. Д. Остается, и его легко найти. В таких случаях они случаются так кратко, что это делает его очень тяжелым. То, что я сделал, это сделать действия выше до того момента, когда я запускал/отключил его и наблюдал, как DOM появляется или исчезает. Я, наконец, получил в нужном месте и нашел это с помощью ScreenCap и OCR

<div class="modal in" id="loading-modal" data-backdrop data-keyboard="false" tabindex="-1" role= "dialog" aria-hidden="true" style="z-index: 1100; top: 475px; display: block; padding-right: 17px;" modal-dialog"> 
<div> id="loading-page-backdrop" class="in"></div> 

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

// wait for modal to disappear 
new WebDriverWait(driver, 10).until(ExpectedConditions.invisibilityOfElementLocated(By.id("loading-modal"))); 
// do stuff 

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

BTW, я пишу автоматизацию на Java, и мне никогда не нужно было прокручивать окно ... это просто делает это для меня. Вы пробовали сценарий без кода прокрутки?

+0

Большое вам спасибо за вашу помощь, Im в настоящее время использую firefox 47.0.1, и по какой-то причине, если я не прокручиваюсь до соответствующего местоположения на странице, где WebElement находится, прежде чем пытаться выполнить какие-либо действия, которые я получаю с сообщением, которое невозможно щелкнуть по точке. Являются ли screencap и OCR типом программного обеспечения? Еще раз спасибо – Gbru

+0

Screencap - это всего лишь скриншот ... screencapture. OCR - это программное обеспечение, которое извлекает текст из изображений. Я сделал это, чтобы опубликовать текст здесь, вам не нужна эта часть. Просто сделайте снимок экрана, чтобы, если он быстро исчезнет, ​​вы все равно можете вернуться и посмотреть HTML. – JeffC

+0

спасибо @JeffC – Gbru

0

Раствор я использую для ожидания загрузки страницы ждет заголовок страницы, чтобы соответствовать тому, что я ожидал. Например:

public Boolean waitForPageIsLoaded(String title) { 
    return new WebDriverWait(driver, 10).until(ExpectedConditions.titleIs(title)); 
} 

Конечно, если вы знаете, что WebElement вас ждут есть много ExpectedConditions вы можете воспользоваться, например, visibilityOf()

0

Для проверки страницы загружается полностью, перебрать ниже заявление, пока она не возвращает значение «полный»

(String) ((JavascriptExecutor) driver).executeScript("return document.readyState"); 

Для более подробной информации см here