无法单击网页中的任何链接

时间:2016-07-29 12:51:05

标签: javascript selenium

我使用selenium webdriver来自动化网页。我的selenium代码没有识别链接。我收到以下错误。

  

线程“main”中的异常org.openqa.selenium.NoSuchElementException:   没有这样的元素:无法找到元素:   {“method”:“xpath”,“selector”:“/ html / body / font / font / b / a [2]”}(会话)   info:chrome = 44.0.2403.89)

这是我正在使用的代码。

public static void main(String[] args) 
{       
    System.setProperty("webdriver.chrome.driver","C:\\Program Files (x86)\\Google\\Chrome\\chromedriver.exe");

         WebDriver driver = new ChromeDriver(); 
         driver.get("url");
        driver.findElement(By.xpath("/html/body/font/font/b/a[2]")).click();
}

提前致谢

2 个答案:

答案 0 :(得分:0)

有两种可能的情况

1)您可能输错了网址

2)你的预期元素xpath是错误的。

请使用

验证您的xpath

这个tolol:https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl?hl=en

public static void main(String[] args) {
  System.setProperty("webdriver.chrome.driver", "C:\Program Files (x86)\Google\Chrome\chromedriver.exe");
  WebDriver driver = new ChromeDriver();
  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
  driver.get("Valid url");

 driver.findElement(By.xpath("your valid XPATH")).click();

  driver.close();
 }

答案 1 :(得分:0)

如果您获得NoSuchElementException作为提供的例外情况,可能有以下原因: -

  • 您可能找不到xpath的错误,因此您需要共享HTML以获得更好的定位器解决方案。

  • 可能是在您要查找元素时,它不会出现在DOM上,因此您应该实现WebDriverWait以等待元素可见且可点击如下: - < / p>

    WebDriverWait wait = new WebDriverWait(driver, 10);
    WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.linkText("Duty Office")));
    el.click();
    
  • 此元素可能位于任何frameiframe内。如果是,您需要在找到以下元素之前切换frameiframe: -

    WebDriverWait wait = new WebDriverWait(driver, 10);
    
    //Find frame or iframe and switch
    wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("your frame id or name"));
    //Now find the element 
    WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.linkText("Duty Office")));
    el.click();
    
    //Once all your stuff done with this frame need to switch back to default
    driver.switchTo().defaultContent();
    

希望它有帮助...:)