2010-05-12 3 views
2

Я хочу использовать сценарии селена, чтобы щелкнуть на связке ссылок на моей веб-странице один за другим, каждый щелчок приводит к обновлению страницы. Однако selenium не поддерживает псевдо-класс css, например: visited, поэтому я не могу отличить те, которые уже нажаты, из тех, которые я хочу щелкнуть дальше. Есть ли способ решить мою проблему?selenium scripts

вот мой код: http://pastebin.com/z0uRTHHp

ответ

0

Нового ответа для решения с помощью Selenium IDE:

Примечания: Вам нужно установить плагин управления потоком от https://addons.mozilla.org/en-US/firefox/addon/85794/ (или используйте пользовательское расширение с http://51elliot.blogspot.com/2008/02/selenium-ide-goto.html)

<tr> 
    <td>storeXpathCount</td> 
    <td>//body/descendant::a</td> 
    <td>linkCount</td> 
</tr> 
<tr> 
    <td>store</td> 
    <td>1</td> 
    <td>link</td> 
</tr> 
<tr> 
    <td>label</td> 
    <td>checkLink</td> 
    <td></td> 
</tr> 
<tr> 
    <td>echo</td> 
    <td>checking link ${link} of ${linkCount}</td> 
    <td></td> 
</tr> 
<tr> 
    <td>clickAndWait</td> 
    <td>//body/descendant::a[${link}]</td> 
    <td></td> 
</tr> 
<!-- ADD YOUR CHECKS HERE --> 
<tr> 
    <td>goBackAndWait</td> 
    <td></td> 
    <td></td> 
</tr> 
<tr> 
    <td>while</td> 
    <td>storedVars['link'] &lt;= storedVars['linkCount']</td> 
    <td></td> 
</tr> 
<tr> 
    <td>storeEval</td> 
    <td>storedVars['link'] = ${link} + 1;</td> 
    <td></td> 
</tr> 
<tr> 
    <td>gotolabel</td> 
    <td>checkLink</td> 
    <td></td> 
</tr> 
<tr> 
    <td>endWhile</td> 
    <td></td> 
    <td></td> 
</tr> 
+0

вы хороши .... – user121196

+0

Следующий xpath с clickAndWait не работает в селене, любая идея? clickAndWait // a [text() = 'Test'] [$ {link}] – user121196

+0

Это может быть из-за тонкости в XPath, где '// a [1]' будет выбирать все последующие элементы 'a', которые являются первыми пара детей их родителей, а не первый элемент 'a' во всем документе. Возможно, вам будет лучше использовать что-то вроде // body/descendant :: a [1] 'или привязать его к элементу с идентификатором типа id ('myLinks')/descendant :: a [1]'. Не то, что в последнем примере вам нужно будет продолжить локатор с помощью 'xpath ='. –

3

Вы можете использовать команду getXPathCount вернуть количество ссылок на странице, а затем цикл через них с помощью XPath. Простой пример использования Java с Selenium RC следующим образом:

int linkCount = selenium.getXpathCount("/descendant::a").intValue(); 
for (int i = 0; i < linkCount; i++) { 
    selenium.click("/descendant::a[" + i + "]"); 
    selenium.waitForPageToLoad("60000"); 
    //ADD YOUR CHECKS HERE 
    selenium.goBack(); 
    selenium.waitForPageToLoad("60000"); 
} 

Если вы используете Selenium 2 или WebDriver, следующее должно работать:

List<WebElement> links = driver.findElements(By.xpath("/descendant::a")); 
int lSize = links.size(); 

for (int l = 0; l < lSize; l++) { 
    links = driver.findElements(By.xpath("/descendant::a")); 
    WebElement link = links.get(l); 
    link.click(); 
    //ADD YOUR CHECKS HERE 
    driver.navigate().back(); 
} 

Надежда, что помогает.

+0

спасибо, я делаю это в javascript и html тестовых случаях в Firefox addon, см. Ссылку на код в моем вопросе. Я не уверен, как поместить вашу концепцию в фрейм (html и javascript test case). У меня есть, можете ли вы помочь и, возможно, предоставить примерный код? – user121196

+0

Добавлен новый ответ для решения через Selenium IDE –

0

Click по всем ссылкам на странице:

@Test 
    public void test() throws InterruptedException { 
    try { 
    List<WebElement> no = driver.findElements(By.tagName("a")); 
    int nooflinks = no.size(); 
    System.out.println(nooflinks); 
    for (WebElement pagelink : no) { 
    no.click(); 
    String linktext = pagelink.getText(); 
    driver.navigate.refresh(); 
     Thread.sleep(1000); 
    System.out.println(linktext); 
     } 
    } 
    catch (Exception e){ 
    System.out.println("error "+e); 
     } 
    } 
0

сначала вам нужно скачать все ссылки на вашу веб-страницу :

List<WebElement> links= driver.findElements(By.Tag('a')); 

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

for(WebElement link: links) 
{ 
//wait for element to clickable 
WebDriverWait wait = new WebDriverWait(driver, 10); 
wait.until(ExpectedConditions.elementToBeClickable(link); 
link.click(); 
} 

и если вы хотите, чтобы выделить то, что ссылка уже была нажата, так может быть ваш цвет текста ссылка будет исчезать или изменить после щелчка.