提问人:rathorsunpreet 提问时间:11/3/2023 更新时间:11/4/2023 访问量:27
NoSuchElementException 尝试选择 HTML 标记
NoSuchElementException on trying to pick select HTML tag
问:
我目前正在学习 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
更改要使用的“查找”表示法。
id="testingDropdown"
更改要使用的“查找”表示法。
xpath=//*[@id="testingDropdown"]
使用 TestNGSuite.xml 中的 exclude 标记排除测试。
checkDropDown
注释掉我的测试文件中的方法。
checkDropDown
使用以下命令将方法中的下拉列表居中:
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 对象,则只有测试文件才会执行。WebElement
Select
所以,我被困住了,不知道如何解决这个问题。
答:
我是个白痴。从构造函数代码中可以看出,对象是在页面甚至没有加载时构建的。因此,没有带有 id 的 DOM 元素。创建了另一个方法,并在方法的开头调用该方法以初始化对象并执行 .现在,测试用例执行了,一切都很好!Select
checkDropDown
Select
findElement(By.id('testingDropdown')
WebElement
评论