【问题标题】:Unable to click any link in the web page无法点击网页中的任何链接
【发布时间】:2016-12-04 04:52:39
【问题描述】:

我正在使用 selenium webdriver 来自动化网页。我的硒代码无法识别链接。我收到以下错误。

线程“主”org.openqa.selenium.NoSuchElementException 中的异常: 没有这样的元素:无法找到元素: {"method":"xpath","selector":"/html/body/font/font/b/a[2]"} (会话 信息:铬=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();
}

提前致谢

【问题讨论】:

  • 你能分享你的链接的HTML吗??
  • 好的,我已经提供了它作为答案,试试看,如果没有问题,请告诉我。:)
  • 试试这个“//body/font/font/b/a[2]”
  • 能否提供您测试的域和 http 页面,以便我验证

标签: javascript selenium


【解决方案1】:

如果您收到NoSuchElementException 作为您提供的异常,可能有以下原因:-

  • 可能您使用不正确的xpath 进行定位,因此您需要共享 HTML 以获得更好的定位器解决方案。

  • 可能当您要查找元素时,它不会出现在DOM 上,因此您应该实现WebDriverWait 以等待元素可见和可点击,如下所示:-

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

希望对您有所帮助...:)

【讨论】:

  • 感谢 Saurabh,它成功了。但是现在单击链接后,线程“主”org.openqa.selenium.WebDriverException 中又出现了一个错误异常:未知错误:脚本没有返回元素引用(会话信息:chrome = 44.0.2403.89)
  • @Elaine 这是由于元素过时而发生的。您可以存储 Web 元素并执行操作,直到页面没有更改。一旦页面被改变硒从他们的案例中删除元素的引用,在这种情况下你需要再次找到元素......:)
  • 哦,好的。但是如果下一页(点击链接导航到新页面)有同样的问题,那么我可以使用我已经使用过的等待语句还是需要再次创建一个新的等待语句?在新页面中,我尝试找到一个新元素,但遇到的问题与我最初遇到的问题相同
  • @Elaine 无需再次创建新的等待对象。只需使用具有相同预期条件的已创建等待对象...:)
  • 感谢和抱歉给您带来的麻烦。正如我之前提到的,导航到新页面现在无法识别框架。只有第一帧被识别和点击,而不是下一帧。
【解决方案2】:

有两种可能的情况

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();
 }

【讨论】:

  • 我提供了正确的网址,我可以访问该网址,但无法点击任何链接或任何按钮,也无法在页面的文本框中输入数据。
  • 您是否尝试使用提供的插件验证您的 Xpath
  • 是的,我已经验证了
  • 仍然面临问题??
猜你喜欢
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
  • 2020-03-25
  • 1970-01-01
  • 2016-03-21
  • 2021-07-02
  • 2014-04-03
相关资源
最近更新 更多