当前位置: 首页 > 知识库问答 >
问题:

即使此元素存在,仍获得NoSuchElementException

徐博雅
2023-03-14

亲爱的Selenium Webdriver专家,

当从http://www.domain.com.au/property/for-sale/house/nsw/auburn/?adid=2010111460对“/html/body/form/div[2]/div[4]/div[1]/div/div/div[1]/a”执行XPath查询时,我(在if语句上)遇到以下异常:

Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":"/html/body/form/div[2]/div[4]/div[1]/div/div/div[1]/a"}

下面是发生此异常的代码段:

WebDriver driver = new FirefoxDriver(firefoxProfile);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://www.domain.com.au/Property/For-Sale/House/NSW/Auburn/?adid=2010111460");

if (driver.findElement(By.xpath("/html/body/form/div[2]/div[4]/div[1]/div/div/div[1]/a")).isDisplayed() && 
    driver.findElement(By.xpath("/html/body/form/div[2]/div[4]/div[1]/div/div/div[1]/a")).getAttribute("href").length() > 0) {
    WebElement photoPageElement = driver.findElement(By.xpath("/html/body/form/div[2]/div[4]/div[1]/div/div/div[1]/a"));
    photoPageURL = photoPageElement.getAttribute("href");
    .....
} 

此代码段已成功地从其他属性(如http://www.domain.com.au/property/for-sale/house/nsw/auburn/?adid=2010007127)定位相同元素。

我正在寻找一个高质量的XML/XHTML资源管理器来遍历相同的文档,以便识别这种异常的原因。

有没有可能检查一个元素的存在而没有得到异常的风险?我以为driver.findElement(by.xpath(....).isDisplayed())就是要这样做的。

我正在Windows XP/7上运行Selenium Webdriver 2.25.0、Java 7.0、Netbeans 7.2。

先谢谢你,

千斤顶

共有2个答案

朱英范
2023-03-14
相关问题
谢承
2023-03-14

我建议您开始使用CSS和id定位器而不是XPath来使脚本更易读和更健壮。CSS定位器也应该更快,这在运行更大的测试套件时派上了用场。要找到元素定位器,有很多选择:不需要安装任何东西,在Chrome和Firefox中可以右键单击->Inspect元素,例如在IE中可以使用开发人员工具。

XPath定位器可能存在一些问题,导致NosuChelementException。如果您期望这样做,您可以捕获异常,但如果重点是获取链接URL,您可能不想这样做。

比如看你先链接的页面,大图包裹在一个A元素里面:

<a id="ctl00_ctl00_Content_Content_propertyPhotos_MainImage_MainPhotoLink" class="feature" target="ImageWindow" href="/ore/Public/Gallery/Photo.aspx?adid=2010111460&pic=1&mode=Buy"> 
WebElement element = driver.findElement(By.id("ctl00_ctl00_Content_Content_propertyPhotos_MainImage_MainPhotoLink"));

然后读取HREF:

String linkHref = element.getAttribute("href");

您可以在这里阅读有关CSS选择器的内容,使用这些选择器,您可以执行一些操作,例如单击WebDriver中MainImage

中的 :

driver.findElement(By.cssSelector("div#ctl00_ctl00_Content_Content_propertyPhotos_MainImage_upnlHeroImage img")).click();

 类似资料:
  • 我有下面的代码: 联机System.NullReferenceException:DownloadLinkList.Add(Item.SelectSingleNode(“.//a”).Attributes[“href”].Value); 怎样才能妥善处理,让它不再崩溃?我的印象是,它应该只是跳过前面。 使用也不是一个选项,因为我仍然需要没有所需的的某个页面的信息。

  • 我用的是Selenium ChromeDriver v2.40,Chrome版本67。 上面两个findelement都可以,可以获取值,但不能点击,因为元素不可见。 所以我继续尝试预期条件,没有运气: 上面的代码返回: 它与Chromev67有任何向后兼容问题吗?

  • 请参考截图。我正试图单击“取消”按钮,如我的截图所示。即使元素的ID存在,我也无法单击按钮。弹出窗口既不是一个新窗口,也不像是一个警告我。我试图搜索是否是窗口句柄的问题。但是当我搜索窗口句柄时,它只给我一个数字: 收到错误消息- 线程“main”org.openqa.selenium.nosuchelementexception:没有这样的元素:找不到元素:{“method”:“id”,“sele

  • 问题内容: 我正在尝试使用getElementById()获取元素,但是即使元素存在,它也会返回null。我究竟做错了什么? 问题答案: 您必须将其放在一个 事件中。脚本执行时尚未到达DOM 。

  • 我的代码: 我有一个问题即使它存在,也找不到该元素。我用汤仔细检查了元素是否确实存在,并且它按照输出进行操作。 输出: 我有一个遍历每个应用程序域的循环(包含来自每个的数据)但是,它在大多数情况下都会找到并单击元素,但对于某些元素却没有,我不知道为什么。 这是站点html。有许多,每个都包含不同的,我需要单击它

  • 这是我用来使用铬Web驱动程序和python查找元素的代码行 这是每次尝试运行代码时抛出的错误 这些是标题栏上的按钮,我试图让我的代码单击html按钮 这是努力按钮的html代码,我试图使用selenium来定位它,以便它可以点击这里,但它总是说没有找到这样的元素 我甚至创建了一个单独的函数来一次又一次地找到元素并在每次成功尝试后Hibernate5秒,直到它点击了元素,但仍然没有运气它永远运行而