使用Java随机选择Selenium WebDriver中的链接

时间:2015-11-02 05:02:57

标签: java eclipse selenium-webdriver webdriver

我想从页面中选择一个随机链接。我添加了一个警报,以查看元素是否存在。该页面给出了'a is shows'警告,但我在eclipse上遇到以下错误:元素目前不可见,因此可能无法与进行交互

以下是代码:

String tag = "a";
    boolean tagChk = driver.findElement(By.tagName(tag)).isDisplayed();

    if(tagChk == true){
        JOptionPane.showMessageDialog(null, tag +" is displayed");
        System.out.println(tag +" is displayed");
        List<WebElement> links = driver.findElements(By.tagName(tag));
        WebElement randomElement = links.get(r.nextInt(links.size()));
        //JOptionPane.showMessageDialog(null, "Random link clicked");
        randomElement.click();
    }
    else
        JOptionPane.showMessageDialog(null, tag +" is not displayed");

我已经检查了这些问题中最着名的答案,但似乎都没有。

1 个答案:

答案 0 :(得分:0)

检查link元素的可见性时,结果仅应用于页面上的第一个链接元素。

boolean tagChk = driver.findElement(By.tagName(tag)).isDisplayed();

当您使用findElements获取链接列表时,您将获得所有链接(可见且不可见)。

List<WebElement> links = driver.findElements(By.tagName(tag));

因此很可能randomElement不可见。

似乎你应该首先获得可见链接列表:

String tag = "a";

    List<WebElement> links = driver.findElements(By.tagName(tag));
    List<WebElement> visibleLinks = new ArrayList<WebElement>();
    for (WebElement link : links){
        if(link.isDisplayed())
            visibleLinks.add(link);
    }

    boolean tagChk = visibleLinks.size()>0;

    if(tagChk == true){
        JOptionPane.showMessageDialog(null, tag +" is displayed");
        System.out.println(tag +" is displayed");
        WebElement randomElement=visibleLinks.get(r.nextInt(visibleLinks.size()));
        //JOptionPane.showMessageDialog(null, "Random link clicked");
        randomElement.click();
    }
    else
        JOptionPane.showMessageDialog(null, tag +" is not displayed");