selenium scripts

余生颓废 提交于 2019-12-12 22:13:30

问题


I want to use selenium scripts to click on a bunch of links on my webpage one by one, each click results in a page refresh. However selenium doesn't support css pseudo class like :visited, so I can't distinguish the ones that are already clicked from the ones that I want to click on next. Is there a way to solve my problem?

here's my code: http://pastebin.com/z0uRTHHp


回答1:


New answer for solving using Selenium IDE:

Note: You'll need to install the Flow Control plugin from https://addons.mozilla.org/en-US/firefox/addon/85794/ (or use the user-extension from 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>



回答2:


You could use the getXPathCount command to return the number of links on the page, and then loop through them using XPath. A simple example using Java with Selenium RC follows:

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");
}

If you're using Selenium 2 or WebDriver, the following should work:

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();
}

Hope that helps.




回答3:


Click on All links on page:

 @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);
        }
     } 



回答4:


first you need to get all links in your web page :

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

second thing you need to iterate one by one with click on particular link and as you mentioned after click your page is going to refresh ,so in that case you need to wait for your next link to fully click able :

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

and if you want to distinguish that what link is already been clicked so may be your link text color will fade or change after click .



来源:https://stackoverflow.com/questions/2816261/selenium-scripts

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!