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

Selenium Web driver- How to Handle the Dynamics Table and Click Specific Element

我是 Selenium webdriver 的新手,正在学习 Dynamics table,因为我卡在了这一点上。我想在动态中单击特定的公司名称 table 我已经为它编写了示例脚本请告诉我它有什么问题。

  1. 我正在使用 icicidirect 网站。
  2. 从主菜单栏中选择市场 link
  3. 现在在页面底部是一个 link "Daily Share Prices" link(它在 "Top Losers" 部分下面可以使用 ctrl+f 获取)
  4. 第一列的每日股价(证券名称)i.e.ABB link 元素是他们的 我想点击那个元素

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

  }

}

几点建议:

  1. 您可以使用以下link直接接收所需的table

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

  2. 您可以等待 table 加载

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

这是适合我的代码

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. 如果您需要找到一些不在第一页上的元素,您可以扩展此解决方案以单击下一步>> link 并返回此循环通过删除硬编码 "ABB"元素。