如何使用webdriver点击每个链接

时间:2015-05-10 17:42:12

标签: java webdriver

点击主菜单下列出的每个链接,我需要帮助。我能够使用list方法列出它们。现在我想点击列出的链接,如果他们打开一个新窗口,请获取URL标题并导航回当前URL。再次列出下一个链接并单击。  我尝试了以下代码,但它对我不起作用:

WebDriver driver = new FirefoxDriver();

driver.navigate().to(myurl);

WebElement element = driver.findElement(By.linkText(mylinkText));

element.click();

System.out.println(element.getText());

WebElement elements = driver.findElement(By.linkText(mylinkText2));

String text123 =elements.getText();

List<WebElement> linkElements = driver.findElements(By.tagName(mytagname));

    String[] linkTexts = new String[linkElements.size()];
int i =0;    

for (WebElement e : linkElements) {
            linkTexts[i] = e.getText();

          System.out.println("sub menus listed under mylinkText" +  linkTexts[i]);

      WebElement tag = driver.findElement(By.tagName(mytagname2));
      Thread.sleep(1000);

     tag.click();
     // driver.navigate().to(linkTexts[i]);

      Thread.sleep(1000);


      System.out.println(driver.getCurrentUrl());

      driver.navigate().back();
               Thread.sleep(1000);

       if(linkTexts[i].equals(text123)){
    break;
       }i++;

2 个答案:

答案 0 :(得分:0)

如果我们想要自动化以下网站菜单 - http://www.telerik.com/

Telerik Menu 您可以使用以下代码执行所需的操作。

[TestClass]
public class MenuLinkTests
{
    public IWebDriver Driver { get; set; }
    public WebDriverWait Wait { get; set; }

    [TestInitialize]
    public void SetupTest()
    {
        this.Driver = new FirefoxDriver();
        this.Wait = new WebDriverWait(this.Driver, TimeSpan.FromSeconds(30));
    }

    [TestCleanup]
    public void TeardownTest()
    {
        this.Driver.Quit();
    }

    [TestMethod]
    public void ClickEveryHrefMenu()
    {
        this.Driver.Navigate().GoToUrl(@"http://www.telerik.com/");
        // get the menu div
        var menuList = this.Driver.FindElement(By.Id("GeneralContent_T73A12E0A142_Col01"));
        // get all links from the menu div
        var menuHrefs = menuList.FindElements(By.ClassName("Bar-menu-link"));

        // Now start clicking and navigating back
        foreach (var currentHref in menuHrefs)
        {
            this.Driver.Navigate().GoToUrl(@"http://www.telerik.com/");
            currentHref.Click();
            string currentElementHref = currentHref.GetAttribute("href");
            Assert.IsTrue(this.Driver.Url.Contains(currentElementHref));
            // Now the same will happen for the next href
        }
    }
}

代码在C#中,但在Java中几乎相同。

答案 1 :(得分:0)

主要想法是找到某个div内的所有链接

所以你需要像这样使用一些xpath:

datasource

并使用一些循环点击它们:

override func viewDidLoad() {
super.viewDidLoad()

// do this for all your tableViews and make sure to have an outlet configured first
tableView.delegate = self
tableView.datasource = self
addSerial("FCGPR0TUG07P", status: "Shipped", issues: 6, reworks: 2, index: 0, flagged: false)    
}   

但是如果你点击 - 它会刷新页面。所以你需要在新标签页中打开链接,如下所示:

var menuHrefs = menuList.FindElements(By.Xpath(".//div[@id='idOfTheDivWithLinks']/*/a"));