java - 无法使用具有 onclick 的锚标记定位元素
问题描述
无法单击位于锚标记下且具有 onclick 代码的元素。需要单击提交按钮。
我提供了隐式等待,并使用了 xpath 、 css 选择器。
<a onclick="if(validateSupplierANDLocation(4)){return saveorsubmitorder(4);}else{return false;};" id="ctl00_ContentPlaceHolder1_lnkSubmit" tabindex="35" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ContentPlaceHolder1$lnkSubmit", "", true, "saveNexgenOrder", "", false, true))"><img src="../images/tspacer.gif" alt="" width="10" height="1"><img id="imgOSubmit" border="none" src="../images/buttons/submit.gif" alt="Submit" title="Submit" style="cursor:pointer "><img id="imgOReSubmit" border="none" src="../images/buttons/btn_re-submit.gif" alt="Submit" title="Submit" style="cursor: pointer; display: none;"></a>
<img src="../images/tspacer.gif" alt="" width="10" height="1">
<img id="imgOSubmit" border="none" src="../images/buttons/submit.gif" alt="Submit" title="Submit" style="cursor:pointer ">
<img id="imgOReSubmit" border="none" src="../images/buttons/btn_re-submit.gif" alt="Submit" title="Submit" style="cursor: pointer; display: none;">
错误:未知错误:元素在点 (885, 911) 处不可点击。其他元素
会收到点击:
code: WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//html[1]/body[1]/form[1]/div[4]/table[1]/tbody[1]/tr[3]/td[1]/div[1]/div[2]/div[1]/div[3]/a[1]/img[2]")));
driver.findElement(By.xpath("//html[1]/body[1]/form[1]/div[4]/table[1]/tbody[1]/tr[3]/td[1]/div[1]/div[2]/div[1]/div[3]/a[1]/img[2]")).click();
解决方案
用于定位按钮的绝对路径不可靠,因为按钮的位置可能会在 DOM 中发生变化。尝试使用相对 xpath。尝试调试到将元素存储在 WebElement 变量中的位置。如果这是您想要的元素,则执行 click() 操作。
WebElement var = driver.findElement(By....)
在某些情况下,如果单击操作不起作用,则必须使用 JavascriptExecutor。请参阅链接无法单击 java selenium 中的按钮?
推荐阅读
- python - Tkinter GUI Python中的调整大小按钮
- java - Firebase 搜索无法显示结果
- java - 在数据库中插入数据时如何解决 SQLiteException 错误
- excel - 消除Excel中的字符
- sql - 以下代码片段 [!= N''] 的用途是什么
- typescript - 打字稿:定义对象类型而不定义键的类型以获取 keyof
- google-app-engine - Google Kubernetes Engine 服务无法连接到 Snowflake
- rust - 使用通道时 Rust 中的内存分配
- excel - 使用 instr 函数读取逗号的位置,其中包含大量数字
- c - 只要输入有效,就继续运行程序