2015-04-12 4 views
0

Мне нужно написать небольшой тест, и я застрял, потому что сначала мне нужно искать что-то на странице, а затем сортировать его (выпадающий список) и затем щелкните элемент из динамического списка.Ожидание загрузки страницы в Selenium WebDriver перед нажатием на ссылку

Однако, прежде чем нажимать на элемент списка Dropdwon, регистрируется click. Проблема в том, что единственная разница, которую я мог найти между отсортированной и несортированной страницей, - это адрес страницы и что выбранный тип сортировки добавлен class="selected" и ничего больше.

Неявное ожидание не работает, потому что элементы в списке по-прежнему имеют один и тот же класс, и ничего не меняется, кроме порядка, и он обрабатывает их как правильно загруженные. У меня нет ничего, о чем я могу думать, я могу использовать с явным ожиданием. Единственное решение, о котором я могу думать, - дождаться загрузки определенного URL-адреса, но я не могу найти решение для этого.

+0

Возможно, дайте более конкретные примеры. Покажите нам HTML выпадающих меню. Покажите нам, что вы пробовали и как они не работают. – Arran

ответ

0

Поскольку вы уже пробовали скрытые ожидания, есть хороший «взлом», который вы можете использовать. Вместо ожидания на стороне C# - введите переменную JavaScript и опросите ее.

// once 
var script = "window.__mySecretGlobal = 'false'; " + 
      "window.addEventListener('load', function(){ " + 
        "window.__mySecretGlobal = 'true'; " + 
      "});"; 

((IJavaScriptExecutor)driver).ExecuteScript(script); 

Теперь, JavaScript будет установить переменную, вы можете опрашивать для него:

async Task WaitForLoad(){ 
    var loaded = false; 
    var script = "return window.__mySecretGlobal" 
    while(!loaded){ 
     var res = (string)((IJavaScriptExecutor)driver).ExecuteScript(script); 
     if(res.Equals("true")) return; // it's loaded! 
     await Task.Delay(100); // try again in 100 ms 
    } 
} 

Для более полного решения, вы можете пройти тайм-аут и отмены лексем в качестве дополнительных параметров в том, что код.

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

+0

Должен ли я просто вставить его туда, где он должен ждать, или я должен сделать что-то еще с вашим кодом? У меня есть много ошибок, и я не слишком уверен, как их исправить. Http: //i.imgur.com/yvkbuLg.jpg – owiec

+0

@owiec, что вторая часть - это _method_. –

Смежные вопросы