NetSuite自动展示的下拉列表选项无法点击的Selenium定位问题
问题原因
- 显式等待的XPath语法错误:之前编写的XPath直接将目标元素的id值作为DOM节点路径填写,未添加id属性匹配规则,导致Selenium无法解析到对应元素。
- 等待条件选择错误:
presenceOfElementLocated仅校验元素是否存在于DOM树中,无法保证元素可见、可交互,NetSuite下拉选项渲染完成后还会有短暂的显示动画,未完全可见的元素无法被正常定位操作。 - 若之前操作有切入iframe的逻辑,也会导致当前上下文无法定位到根节点下渲染的搜索下拉选项。
修复方案
修正后的代码如下:
public void supplier (WebDriver driver) { // 先切回页面默认上下文,避免iframe影响 driver.switchTo().defaultContent(); Actions action = new Actions(driver); WebElement supplierLink = driver.findElement(By.id("_searchstring")); supplierLink.sendKeys("Advance"); // 修正XPath语法,更换等待条件,拉长等待时长适配NetSuite的接口请求延迟 WebDriverWait wait = new WebDriverWait(driver, 10); WebElement clickadvance = wait.until(ExpectedConditions.elementToBeClickable( By.xpath("//*[@id=\"/app/accounting/transactions/transactionlist.nl?Transaction_TYPE=Custom108\"]") )); clickadvance.click(); }
如果id存在动态变化的情况,也可以换用文本匹配的方式定位下拉选项:
WebElement clickadvance = wait.until(ExpectedConditions.elementToBeClickable( By.xpath("//div[contains(@class,'dropdown-menu')]//*[contains(text(),'Advance')]") ));
问题界面截图

内容的提问来源于stack exchange,提问作者Waj
相关产品推荐
相关产品推荐

