2015-11-02 53 views
0

我想从页面中选择一个随机链接。我添加了一个警报来查看元素是否存在。本页面给了“被显示”的提示,但我对日食得到以下错误:元素当前不可见,所以可能不会使用Java在Selenium WebDriver中随机选择链接

这里进行交互的代码:

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

我已经检查了这个问题的最有名的答案,他们都没有工作。

+0

你做一个布尔检查'driver.findElement(By.tagName(标签))',这是'links.get完全不同(r.nextInt(links.size()))'因此,粘贴或告诉'链接'中的内容会很棒! –

+0

链接是WebElement列表名称。请参阅IF语句中的第三行代码 – Alam

回答

0

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

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"); 
+0

控制台上没有错误,但没有单击任何链接。 – Alam

+0

行'randomElement.click();'执行了吗? 点击后你期望什么? 您可以添加有关随机元素索引的调试信息。 'int randomIndex = r.nextInt(visibleLinks.size());' 'WebElement randomElement = visibleLinks.get(randomIndex);' 'System.out.println(“Index of random element - ”+ randomIndex); ' 之后尝试通过xpath - “// a [randomIndex]”在selenium IDE(或firebug)的页面上手动查找此元素,以便您可以看到确切的元素。可能会被其他元素重叠,但仍然可见。 –

相关问题