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

web驱动程序自动化-无法使用xpath找到元素

印曜灿
2023-03-14

环境:Eclipse-Java-Junit-Firefox web driver

屏幕截图网址 : https://www.dropbox.com/s/26fl2l1y1mkpxiz/Screenshot 2014-01-06 01.52.43.png

我试图测试一个网页,但找不到元素(看起来像按钮)。Firebug的xpath是:<code>/*〔@id='DERIVED_REGFRM1_LINK_ADD_ENRL$118$〕

使用相同的Xpath,它可以正确使用硒IDE(通过录制)。

它的html代码是:

<td valign="top" align="left">
    <div id="win0divDERIVED_REGFRM1_LINK_ADD_ENRL$118$">
        <span class="SSSBUTTON_CONFIRMLINK" title="Enroll in Classes">
            <a id="DERIVED_REGFRM1_LINK_ADD_ENRL$118$" class="SSSBUTTON_CONFIRMLINK" 
            href="javascript:submitAction_win0(document.win0,
    'DERIVED_REGFRM1_LINK_ADD_ENRL$118$');" 
    tabindex="192" ptlinktgt="pt_peoplecode" 
    name="DERIVED_REGFRM1_LINK_ADD_ENRL$118$">Proceed to Step 2 of 3</a>
        </span>
    </div>
</td>

我已经尝试了我的查找By.xpath,id等。例如:driver.findElement(By.xpath ("//*[@id='DERIVED_REGFRM1_LINK_ADD_ENRL118美元$'] ")).点击();

正确的解决方法是什么?

共有3个答案

杜轩昂
2023-03-14

我认为这可能是因为您尝试查找的元素在驱动程序搜索它时不存在于页面上。解决方案之一是定义页面加载超时。您可以使用以下代码行执行此操作:

driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS); 

如果页面加载时间较长,则应增加时间。我用来确保驱动程序在页面加载时等待的第二件事(特别是当某些脚本动态加载内容时)是自定义waitForPageLoaded函数,它应该在您的Web驱动程序打开特定页面或单击执行页面打开操作的按钮/链接后调用。

函数示例:

public void waitForPageLoaded(WebDriver driver) {

 ExpectedCondition<Boolean> expectation = new ExpectedCondition<Boolean>() {
    public Boolean apply(WebDriver driver) {
      return ((JavascriptExecutor)driver).executeScript("return document.readyState").equals("complete");
    }
  };

 Wait<WebDriver> wait = new WebDriverWait(driver,30);
  try {
          wait.until(expectation);
  } catch(Throwable error) {
          assertFalse("Timeout waiting for Page Load Request to complete.",true);
  }
}
司马萧迟
2023-03-14

Webdriver搜索页面对象时,页面对象可能尚未加载。尝试定位失败的步骤,并在它之前放置一个隐式的等待/Hibernate。

如果 Web 驱动程序能够在您知道页面加载问题后找到该页面对象。

  1. 确定测试失败的步骤。
  2. 在步骤之前放置等待/睡眠,即...20秒(足够多)。
  3. 再次执行测试。
  4. 如果测试现在通过,WebDrive会在页面对象完全加载之前搜索它。
罗昱
2023-03-14

尝试使用CSS

WebElement element = new WebDriverWait(driver,30).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a[id*='DERIVED_REGFRM1_LINK_ADD_ENRL'][class='SSSBUTTON_CONFIRMLINK']")));
 类似资料:
  • 我想通过C#使用Selenium web驱动程序定位BNK1的值。我发现我的本地网站有2个iframe。我已经尝试改变,使我的iframe更改为详细的框架,为我获得我的值BNK1在表中。我不知道我无法使用XPath找到iframe的问题是怎么回事。 但我出现错误“没有这样的元素:无法定位元素:{”method“:”XPath“,”selector“:”//IFRAME[@class='tabcon

  • 我将硒与python中的Chrome驱动程序一起使用。 我的问题是,硒给我一个错误,因为我试图访问铬下载页面上的元素(铬://下载)。例如,我试图获取文件url"http://file.jpg"。 但当我试图通过其id获取元素时,我得到了一个异常。 代码: 例外情况: 通过 使用 javascript 对我也不起作用。为什么当我可以在浏览器中看到元素时,我会收到 ?

  • 我是的新手。试图定位一个元素并单击它。 但不断低于错误:

  • 我是Selenium新手:我有这个源代码,正在尝试使用带有selenium web驱动程序的xpath单击一个按钮。这是尝试单击的按钮(html中的最后一行): 我使用这个xpath:,它让我无法找到元素。 知道我为什么以及如何去做吗?

  • 我正尝试使用WinApp驱动程序在Visual Studio 2017中自动化扩展(WPF)的UI,但在使用inspect.exe(Windows SDK)捕获元素时找不到自动化id 最初,当通过inspect.exe检查时,找不到自动化ID。因此,我在XAML文件的automation属性中设置了automation id,并将新的VSIX安装回Visual Studio中,但在捕获元素时,上述

  • 我还将代码更改为 同样的错误... Com.ThoughtWorks.Selenium.SeleniumException:元素内的偏移量无法滚动到视图中:(87,118):[object XrayWrapper[object HTMLDivElement]]命令持续时间或超时:63毫秒构建信息:版本:“2.39.0”,修订版:“FF23eAC”,时间:“2013-12-16 16:11:15”系