无法使用selenium单击href链接

时间:2016-07-04 06:40:35

标签: selenium href

我无法使用以下代码打开href链接。我已经使用代码将标记名称存储为Web元素,并迭代指向我的目标href。请在上面的代码中建议要更改的内容,因为输出表明存在空引用。

String path="http://google.com";

WebDriver driver = new ChromeDriver();
driver.get(path);
driver.manage().window().maximize();

driver.findElement(By.name("q")).sendKeys("hdmi");
driver.findElement(By.name("btnG")).click();


//first get all the <a> elements
List<WebElement> linkList=driver.findElements(By.tagName("a"));

//now traverse over the list and check
for(int i=0 ; i<linkList.size() ; i++)
{
    if(linkList.get(i).getAttribute("href").contains("http://www.hdmi.org/"))
    {
        linkList.get(i).click();
        break;
    }
}

2 个答案:

答案 0 :(得分:1)

在找到如下列表之前,您需要实现一些wait: -

String path="http://google.com";

WebDriver driver = new ChromeDriver();
driver.get(path);
driver.manage().window().maximize();

driver.findElement(By.name("q")).sendKeys("hdmi");
driver.findElement(By.name("btnG")).click();

//wait..
Thread.sleep(2000);

//first get all the <a> elements
List<WebElement> linkList = driver.findElements(By.tagName("a"));

//now traverse over the list and check
for(WebElement el : linkList)
{
    String link = el.getAttribute("href");
    if((link !=null) && (link.contains("http://www.hdmi.org/")))
    {
        el.click();
        break;
    }
}

要获得更好的解决方案,您可以在此使用WebDriverWait查找该链接,而无需使用循环,如下所示: -

driver.findElement(By.name("q")).sendKeys("hdmi");
driver.findElement(By.name("btnG")).click();

WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement link = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[contains(@href,'http://www.hdmi.org/')]")));
link.click();

希望它会帮助你...... :)

答案 1 :(得分:1)

在这种情况下,您不必遍历链接。您可以找到所需的那个并单击它。您将不得不等待结果加载或它将无法正常工作。我猜这就是你的代码无效的原因。

driver.findElement(By.name("q")).sendKeys("hdmi");
driver.findElement(By.name("btnG")).click();
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("a[href*='http://www.hdmi.org/']"))).click();

注意:有多个符合您要求的链接,但此代码仅点击第一个。