Selenium Web驱动程序 - 如何处理动态表并单击特定元素

时间:2015-02-05 09:03:09

标签: selenium-webdriver

我是Selenium webdriver的新手,并且学习了动态表,因为这一刻我陷入困境。我想在动力学表中点击特定的公司名称,我已经为它编写了示例脚本,请告诉我它有什么问题。

  1. 即时通讯使用icicidirect网站。
  2. 从主菜单栏中选择市场链接
  3. 现在位于页面底部,他们是一个链接"每日股价"链接(在#34;顶级输家"下面部分将通过使用ctrl + f得到它)
  4. 每日股票价格在第一栏(安全名称)中,即ABB链接元素是他们的 我想点击那个元素
  5. 
    
    public static void main(String[] args) throws Exception {
    
            WebDriver driver = new FirefoxDriver();
            driver.manage().window().maximize();
            driver.get("http://www.icicidirect.com");
            Thread.sleep(1000);
    
            driver.findElement(By.xpath("//a[contains(text(),'Markets')]")).click();
            Thread.sleep(3000);
            driver.findElement(By.xpath("//a[contains(text(),'Daily Share Prices')]")).click();
            
    
            Thread.sleep(3000);
            TablePageObject tablePageObject = PageFactory.initElements(driver, TablePageObject.class);
    
            tablePageObject.clickLink("ABB");
            
        }
    
    
    	}
    
    
    

    
    
    public class TablePageObject {
    
      private WebDriver driver;
    
      @
      FindBy(css = "table tr")
      private List < WebElement > allTableRows; // find all the rows of the table
    
      public TablePageObject(WebDriver driver) {
        this.driver = driver;
      }
    
      public void clickLink(String SecurityName) {
        for (WebElement row: allTableRows) {
          List < WebElement > links = row.findElements(By.linkText("ABB"));
          // the first link by row is the company name, the second is link to be clicked
          if (links.get(0).getText().contains(SecurityName)) {
            links.get(0).click();
          }
        }
    
      }
    
    }
    &#13;
    &#13;
    &#13;

1 个答案:

答案 0 :(得分:0)

几点建议:

  1. 您可以使用以下链接直接接收所需的表格

    driver.get(&#34; http://content.icicidirect.com/newsiteContent/Market/MarketStats.asp?stats=DailySharePrices&#34);

  2. 您可以等待表格加载

  3. 然后你会找到该元素并点击它(就像在你的代码中一样)。

  4. 这是适用于我的代码

    WebDriver driver = new FirefoxDriver();
    try{
          driver.get("http://content.icicidirect.com/newsiteContent/Market/MarketStats.asp?stats=DailySharePrices");
          (new WebDriverWait(driver, 10/*sec*/)).until(ExpectedConditions.presenceOfElementLocated(By.linkText("ABB")));
    
          List<WebElement> dailyList = driver.findElements(By.linkText("ABB"));
          if (dailyList.size()!=0) {
                    dailyList.get(0).click();
                }
    }
    catch (Exception e) {
           e.printStackTrace();  
    }   
    finally{
           driver.close();
    } 
    
    1. 如果您需要找到一些不在第一页上的元素,您可以扩展此解决方案以点击下一个&gt;&gt;通过删除硬编码&#34; ABB&#34;链接并回到此循环来改进它元件。