Проверка ссылок внутри страницы - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть ссылка на помощь в моем приложении. Когда пользователь нажимает на эту ссылку, открывается новое окно браузера с содержимым справки. На левой стороне есть дерево, похожее на меню. Для каждого меню при щелчке на правой панели появляется соответствующий справочный контент. Я хочу написать автоматический скрипт, который будет проходить через все меню с левой стороны и проверять их правильность. Мне также нужно проверить ссылки в содержании, если они действительны или нет. Структура HTML сложная со слишком большим количеством каскадных наборов фреймов и фреймов, как показано ниже.

В настоящее время я использую селен 2.0 (API webdriver). Я знаю, что с помощью веб-драйвера я могу переключаться на фреймы, нажимать на каждое меню, получать все ссылки и проверять их. Поскольку HTML немного сложен, мой код автоматизации тоже усложняется.

Есть ли другой способ сделать это? Возможно, jQuery или какая-то другая библиотека JS? На странице не используется jQuery, но я могу добавить один и использовать jQuery API, если это необходимо.

Спасибо за вашу помощь!

<html>
  <head>
  <frameset>
     <frame id="toolbar">
     <frame scrolling="auto">
       <html>
          <head>
          <frameset id="whPfset">
            <frame id="minibar_navpane">
              <html>
                <head>
                 <frameset>
                    <frame id="minibar">
                    <frame id="navpane">
                      //here are all the menus on left hand side
                                   //here I want to verify if the menu links are working
                  </frameset>
               </html>
             <frame>
             <frame id="topic">
            //here is the content displayed for a selected menu
                //here I want to verify if the links in the content if any are valid or not
          </frameset>
        </html>
      </frame>
    </frameset>
</html> 

Ответы [ 3 ]

1 голос
/ 07 сентября 2011

Чтобы добавить к ответу Джека, вы можете назначить все ссылки, которые вы хотите посмотреть на специальный класс, например class = "checkme", тогда вы можете сделать:

$('a.checkme').each(function(index,element){
    //do something
});

, что даст небольшой прирост производительности. Что может быть лучше, если все ссылки, которые вы хотите проверить, находятся внутри определенного элемента div или контейнера с набором идентификаторов, вы можете сделать:

$('#divID a.checkme').each(function(index,element){
    //do something
});

Что даст вам лучшее повышение производительности, и кстати, внутри цикла объектов вы можете получить доступ к тегу href следующим образом:

$(this).attr('href'); // returns url set
$(this).attr('href', 'hxxp://whatever.com'); // sets the href to a different value.

Опять же, все это требует, чтобы вы включили jquery.

1 голос
/ 07 сентября 2011

Это перебирает все теги a на странице. Требуется jQuery.

$('a').each(function(index,element){
    //do something
});
0 голосов
/ 26 сентября 2011

Я так и сделал.Я не смог переключиться на кадры, используя JQuery как-то.Я пытался $('#navpane').contents().find("a"); Это не сработало.Возможно, мне пришлось использовать аналогичный каскадный подход в jQuery для переключения фреймов, таких как Webdriver.Например, что-то вроде $('#frame1').contents().find("#frame2").contents().find("#andsoon"); Так что в итоге я использовал API WebDrivers для переключения фреймов, перехода по ссылкам, проверки ссылки 'href's and image' src '.Оказалось, что это хорошо работает без особых сложностей и без использования jQuery, который я изначально думал иначе.Сложная часть - driver.switchTo().defaultContent();, когда вы переходите от рамок к рамкам.Спасибо всем за помощь и указатели.

@FindBy(css="frame[scrolling='auto']")
WebElement top;
@FindBy(css="frameset#whPfset>frame#minibar_navpane")
WebElement mininav;
@FindBy(css="frameset#whPfset>frame#topic")
WebElement topic;
@FindBy(css="frameset>frame#navpane")
WebElement nav;
@FindBy(css="iframe#tocIFrame")
WebElement tocFrame;
public int switchToLeftNaviGationFrame(){
    driver.switchTo().defaultContent();
    switchToFrame(top); 
    switchToFrame(mininav);
    switchToFrame(nav);
    switchToFrame(tocFrame);
    return 0;
}
public int switchToFrame(WebElement frame){
      try {
        driver.switchTo().frame(frame);
        return 0;
    } catch (Exception e) {
        e.printStackTrace();
            return 1;
    }
}
...