NoSuchElementException 尝试选择 HTML 标记

NoSuchElementException on trying to pick select HTML tag

提问人:rathorsunpreet 提问时间:11/3/2023 更新时间:11/4/2023 访问量:27

问:

我目前正在学习 Selenium 4,并决定为该网站编写一些代码:使用 Java 绑定、TestNG 和 Firefox 驱动程序进行测试的艺术。在网站上,有一个下拉列表(选择 HTML 元素),其 id 为 testingDropdown。我目前正在使用 Page Object Factory,因此使用 @FindBy 表示法来获取 DOM 元素。我正在使用 Select 对象来处理下拉列表。其代码如下:

    @FindBy(tagName="select")
    private WebElement selectDropDown;
    
    private Select selectDropList;
    
    public PageObject(WebDriver driver) {
        this.driver = driver;
        
        PageFactory.initElements(driver, this);
        
        action = new Actions(driver);
        
        selectDropList = new Select(selectDropDown);

    }

检查此DOM的方法如下:

 @Test
  public void checkDropDown() throws Exception {
      assertFalse(pageObj.isDropDownMultiple());
      assertEquals(pageObj.getDropDownSize(), 4);
      
      List<String> listOptions = new ArrayList<>();
      listOptions.add("Automation");
      listOptions.add("Performance");
      listOptions.add("Manual");
      listOptions.add("Database");
      
      for (int i = 0; i < listOptions.size(); i++) {
          String visibleText = listOptions.get(i) + " Testing";
          assertEquals(pageObj.selectDropDownItem(listOptions.get(i)), visibleText);
      }
  }

我的代码失败,并显示 .我尝试了以下方法,但异常仍然存在:NoSuchElementFoundException: select

  1. 更改要使用的“查找”表示法。id="testingDropdown"

  2. 更改要使用的“查找”表示法。xpath=//*[@id="testingDropdown"]

  3. 使用 TestNGSuite.xml 中的 exclude 标记排除测试。checkDropDown

  4. 注释掉我的测试文件中的方法。checkDropDown

  5. 使用以下命令将方法中的下拉列表居中:isDropDownMultiple

    公共布尔值 isDropDownMultiple() { 下拉列表居中 ((JavascriptExecutor) 驱动程序).executeScript(“arguments[0].scrollIntoView(true);”, selectDropList); 返回 selectDropList.isMultiple(); }

为了验证该元素是否存在,我在Firefox的开发工具中尝试了以下代码:

var s = document.getElementById("testingDropdown");
console.log(s.innerHTML);

并得到以下结果,证明该元素存在并且是可见的:

<option id="automation" value="Automation">Automation Testing</option><option id="performance" value="Performance">Performance Testing</option><option id="manual" value="Manual">Manual Testing</option><option id="database" value="Database">Database Testing</option>

stackoverflow 中,我尝试将元素居中,我正在使用 20 秒的持续时间。有了这个时间范围和下拉列表之前的其他 11 个测试,页面就完全加载了。implicitWait

由于此异常,将跳过所有测试。如果我注释掉 and 对象,则只有测试文件才会执行。WebElementSelect

所以,我被困住了,不知道如何解决这个问题。

java selenium-webdriver 异常 webdriver selenium-firefoxdriver

评论


答:

0赞 rathorsunpreet 11/4/2023 #1

我是个白痴。从构造函数代码中可以看出,对象是在页面甚至没有加载时构建的。因此,没有带有 id 的 DOM 元素。创建了另一个方法,并在方法的开头调用该方法以初始化对象并执行 .现在,测试用例执行了,一切都很好!SelectcheckDropDownSelectfindElement(By.id('testingDropdown')WebElement