java - 在对话窗口中选择可见元素
问题描述
我有一个 Angular SPA 应用程序,它有几个对话框窗口:
完整代码:https ://pastebin.com/81ikb5gE
<mat-dialog-container aria-modal="true" class="mat-dialog-container ng-tns-c18-93 ng-trigger ng-trigger-dialogContainer ng-star-inserted" tabindex="-1" id="mat-dialog-12" role="dialog" style="transform: none;"><!----><mobileweb-inquiry-menu-dialog _nghost-shn-c52="" class="ng-star-inserted"><mobileweb-client-area _ngcontent-shn-c52="" id="clientarea" _nghost-shn-c3="">
.....
</mat-dialog-container>
我面临以下问题:在此对话框中,我有相同的 html 标记 ID。有时我有 4 次相同的 ID。该应用程序运行良好错误我总是得到第一个 id,其余的都找不到。
我使用此代码打开对话框窗口:
WebDriverWait webDriverWait = new WebDriverWait(driver, 25);
System.out.println("Click on Button " + name + " using id locator " + buttonId);
WebElement webDriverElement = webDriverWait.until(ExpectedConditions.visibilityOfElementLocated(By.id(buttonId)));
webDriverElement.click();
是否可以driver
仅将 WebDriver 的实例与当前活动对话框的元素隔离?例如,是否可以将所有元素放入对话框窗口并剪切所有其余的 html 元素?
还有其他解决方案吗?
解决方案
该应用程序运行良好错误我总是得到第一个 id,其余的都找不到:-
对于这个问题,您可以尝试使用xpath axes
或xpath indexing.
假设您有这样的 xpath:
//input[@class='some-class']
代表 4 个项目,您可以像这样执行 xpath 索引:
(//input[@class='some-class'])[1]
或者
(//input[@class='some-class'])[2]
为此:
是否可以仅将 WebDriver 的驱动程序实例与当前活动对话框的元素隔离?例如,是否可以将所有元素放入对话框窗口并剪切所有其余的 html 元素?
我会说有一个代表特定模型对话的定位器。
并且您可以调用getAttribute('innerHTML')
并且应该表示特定的 HTML 内容。
推荐阅读
- scp - /tmp 目录中的 scp 权限被拒绝
- python - Raspberry Pi 2 b 使用按钮开关 GPIO 24 和 Groung 启动和停止 python
- reactjs - 反应蚂蚁设计表的搜索过滤器错误
- android - 如何从代码中检查自定义数组适配器中的复选框?
- security - 有谁知道如何保护端口映射器?
- sql - 如何使用 datediff btween 2 列以日期格式生成结果
- tensorflow - Tensorboard histogram_freq 使用 CPU 而不是 GPU
- python - AttributeError: 'int' 对象在 TFIDF 和 CountVectorizer 中没有属性 'lower'
- windows-10 - 在 Windows10 中成功映射后未显示网络驱动器
- fabricjs - 透明对象作为 clipPath