Добрый день...
Я только начал учить Selenium.
Решил написать простенький скрипт: Зайти на мыло, проверить входящие.
[codebox]selenium.Open("http://bigmir.net");
selenium.Click("UserEmailStatusImg");
selenium.Type("login", "......");
selenium.Type("pass", ".....");
selenium.Click("subm");
selenium.WaitForPageToLoad("300000");
selenium.SelectFrame("cwlrx3syqxvgf");
selenium.Click("link=Входящие");[/codebox]
Но столкнулся с такой проблемкой как редирект - с "bigmir" на "google", а потом на "mail.google.com"
На сколько я понимаю, то WaitForPageToLoad здесь не катит
Можно ли написать, что-то типа ожидания определенного адреса, потом только продолжить скрипт?
Или еще какие-то варианты...
Спасибо
Проблема с редиректами
Автор crazybutcher, 23 июн 2009 10:28
Сообщений в теме: 5
#1
Отправлено 23 июня 2009 - 10:28
#2
Отправлено 23 июня 2009 - 10:56
Добрый день...
Я только начал учить Selenium.
Решил написать простенький скрипт: Зайти на мыло, проверить входящие.
selenium.Open("http://bigmir.net"); selenium.Click("UserEmailStatusImg"); selenium.Type("login", "......"); selenium.Type("pass", "....."); selenium.Click("subm"); selenium.WaitForPageToLoad("300000"); selenium.SelectFrame("cwlrx3syqxvgf"); selenium.Click("link=Входящие");Но столкнулся с такой проблемкой как редирект - с "bigmir" на "google", а потом на "mail.google.com"
На сколько я понимаю, то WaitForPageToLoad здесь не катит
Можно ли написать, что-то типа ожидания определенного адреса, потом только продолжить скрипт?
Или еще какие-то варианты...
Спасибо
было что-то похожее...
решил отслеживанием title страниц...
selenium.getTitle()
написал функцию, которая ждет 3 секунды и проверяет title, если он такой, как передаваемый параметр, то хватит ждать, иначе ещё подождать... как передаваемый параметр в функцию можно также указать и таймаут (сколько ждать прежде чем выдать таймаут-error)
- Зачем идти в разработчики, когда столько кайфа в тестировании?!
#3
Отправлено 23 июня 2009 - 11:49
А можно плиз по точнее, как это все написать
#4
Отправлено 23 июня 2009 - 12:22
А можно плиз по точнее, как это все написать
ну... что-то вроде этого...
помидорами не кидайтесь... писал навскидку...
public static void waitForTitle(String Title, long MyTimeOut) {boolean NotFound=true;long timeOut=0;do {if(selenium.getTitle().contains(Title)) {System.out.println("Yes"); //вывод это просто для наглядности... потом его надо //закоментарить...NotFound=false;break; }else { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); }timeOut+=3000;NotFound=true; } } while (timeOut<MyTimeOut);if(NotFound) System.exit(1);}использование
waitForTitle("Google", 10000);
P.S. по сути он может ждать не 10 секунд, а 12 (в данном случае), т.к. не каждую секунду происходит проверка, а только раз в три секунды...
- Зачем идти в разработчики, когда столько кайфа в тестировании?!
#5
Отправлено 26 июня 2009 - 13:43
Не надо ничего колдовать с циклическими проверками и дополнительными запросами через драйвер, вот:
/** * Waits for element to appear/disappear on page for specified time. * * @param locator an element locator. * @param present if true then waits until element appear, else waits until element disappear. * @param timeout time to wait in milliseconds after which {@link TimeoutException} will be thrown. * @throws TimeoutException if timeout reached. * @throws SeleniumException in case of some problems in Selenium Server. */ public void waitForElement(String locator, boolean present, int timeout) throws SeleniumException { String logMessage = "Waiting for element '" + locator + "' to " + (present ? "" : "dis") + "appear for " + timeout + " milliseconds... Element "; try { waitForCondition((present ? "" : "!") + "selenium.isElementPresent('" + locator.replaceAll("'", "\\\\'") + "');", timeout); } catch (TimeoutException e) { logMessage += "didn't "; throw new TimeoutException(logMessage, e); } finally { logMessage += (present ? "" : "dis") + "appear as expected!"; LOG.debug(logMessage); } } /** * Same as {@link #waitForElement(String, boolean, int)}, but uses default timeout, which can be set by calling * {@link #setTimeout(int)}. * * @param locator an element locator. * @param present if true then waits until element appear, else waits until element disappear. * @throws TimeoutException if timeout reached. * @throws SeleniumException in case of some problems in Selenium Server. */ public void waitForElement(String locator, boolean present) throws SeleniumException { waitForElement(locator, present, timeout); } /** * Same as {@link #waitForElement(String, boolean, int)} with 3rd paramer set to "true". * * @param locator an element locator. * @param timeout time to wait in milliseconds after which {@link TimeoutException} will be thrown. * @throws TimeoutException if timeout reached. * @throws SeleniumException in case of some problems in Selenium Server. */ public void waitForElementAppear(String locator, int timeout) throws SeleniumException { waitForElement(locator, true, timeout); } /** * Same as {@link #waitForElementAppear(String, int)}, but uses default timeout, which can be set by calling {@link * #setTimeout(int)}. * * @param locator an element locator. * @throws TimeoutException if timeout reached. * @throws SeleniumException in case of some problems in Selenium Server. */ public void waitForElementAppear(String locator) throws SeleniumException { waitForElementAppear(locator, timeout); } /** * Same as {@link #waitForElement(String, boolean, int)} with 3rd paramer set to "false". * * @param locator an element locator. * @param timeout time to wait in milliseconds after which {@link TimeoutException} will be thrown. * @throws TimeoutException if timeout reached. * @throws SeleniumException in case of some problems in Selenium Server. */ public void waitForElementDisappear(String locator, int timeout) { waitForElement(locator, false, timeout); } /** * Same as {@link #waitForElementDisappear(String, int)}, but uses default timeout, which can be set by calling * {@link #setTimeout(int)}. * * @param locator an element locator. * @throws TimeoutException if timeout reached. * @throws SeleniumException in case of some problems in Selenium Server. */ public void waitForElementDisappear(String locator) throws SeleniumException { waitForElementDisappear(locator, timeout); }
#6
Отправлено 04 февраля 2010 - 13:58
можно еще и так:
[codebox]for (int second = 0;; second++) {
if (second >= 60) Assert.Fail("timeout");
try
{
if ("" == selenium.GetText("")) break;
}
catch (Exception){
Thread.Sleep(500);
}[/codebox]
[codebox]for (int second = 0;; second++) {
if (second >= 60) Assert.Fail("timeout");
try
{
if ("" == selenium.GetText("")) break;
}
catch (Exception){
Thread.Sleep(500);
}[/codebox]
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных