java - 如何单击带有文本的元素作为编辑?

标签 java selenium xpath css-selectors webdriverwait

我正在尝试使用 Selenium WebDriver 单击具有以下 HTML 代码的按钮:

<a class="uir-item-edit" href="/app/accounting/transactions/transaction.nl?id=400000&amp;e=T" 
id="edit_/app/accounting/transactions/transaction.nl?id=400000" 
aria-label="Edit Sales Order:300000 / 400000 ">Edit</a>

我的代码:

driver.findElement(By.cssSelector("a[aria-label *= 'Edit Sales Order']")).click();

我需要通过 Aria 标签进行识别,因为所有其他组件要么重复,要么更改编号。

一定是我的 CSS 选择器有问题,但我想不通。

让我知道我是否应该包括错误代码、更多信息,或者我是否在帖子中做了不正确的事情。 谢谢!

编辑:aria 标签也改变了,HTML 上的位置也改变了,所以我不能使用 xpath。 DebanJanB 在下面的回答中点击了该元素,但只有当我手动将鼠标悬停在上面时才会点击该元素。

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.uir-item-edit[aria-label^='Edit Sales Order'][id*='transactions']"))).click();

最佳答案

要在文本为编辑的元素上click(),您需要使用elementToBeClickable(),您可以使用以下任一方法Locator Strategies :

  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.uir-item-edit[aria-label^='Edit Sales Order'][id*='transactions']"))).click();
    
  • xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='uir-item-edit' and starts-with(@aria-label, 'Edit Sales Order')][contains(@id, 'transactions') and text()='Edit']"))).click();
    

关于java - 如何单击带有文本的元素作为编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58021356/

相关文章:

xml - 如何通过模式属性和属性值匹配来查找XML中的任何元素

java - 我们如何对 Map 按值降序排序,然后按键按字母顺序排序?

java - 如何将文件从sources目录移动到IntelliJ IDEA中具有相同路径的resources目录?

java - Telegram Bot — 在删除/清除聊天时重置用户设置

java - 如何获取输入元素的文本属性? - 网络驱动程序

java - 从 XML 中删除空属性

xpath - XSLT 使用 XSLT 数组过滤结果

java - 将pre-json编码的字符串输出到spring框架

java - 无法使用相对定位器单击第二个复选框

selenium - 如果激活了多个驱动程序,是否可以获取使用 Selenium 和 Appium 打开的事件驱动程序的 session_id?