我无法使用以下代码打开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;
}
}
答案 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();
注意:有多个符合您要求的链接,但此代码仅点击第一个。