【问题标题】:How to click on the element with text as Edit?如何单击带有文本作为编辑的元素?
【发布时间】:2020-01-21 02:22:03
【问题描述】:

我正在尝试使用 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();

【问题讨论】:

  • 您的代码看起来不错。一定要试试here
  • 你得到了什么错误?
  • 检查元素是否存在于任何 iframe 中?
  • DebanJanB' 答案会在我将鼠标悬停在该元素上时单击它。所以现在我想弄清楚如何将鼠标移到元素上,但这似乎有同样的问题。
  • 鼠标移到它上面,问题解决了!

标签: java selenium xpath css-selectors webdriverwait


【解决方案1】:

click()元素上的文本为Edit,你需要使用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();
    

【讨论】:

    【解决方案2】:

    您可以使用 class="uir-item-edit"。在 CSS 选择器中,您必须使用整个值,例如:Edit Sales Order:300000 / 400000。试试这个

    【讨论】:

    • 让我知道这是否正确:driver.findElement(By.cssSelector("a[aria-label *= 'Edit Sales Order:300000 / 400000 ']")).click();
    【解决方案3】:

    我可以给你解决办法,我知道你正在寻找 CSS 的答案,但你也可以尝试下面的 xpath 解决方案:

    driver.findElement(By.xpath("//*[@class='uir-item-edit']")).click();

    driver.findElement(By.xpath("//*[@class='uir-item-edit'][@aria-label]")).click();

    driver.findElement(By.xpath("//*[@aria-label='编辑销售订单:300000 / 400000']")).click();

    driver.findElement(By.xpath("//*[contains(text(),'Edit')]")).click();

    是的,请分享更多错误信息,祝你好运

    【讨论】:

      【解决方案4】:

      从您的 CSS 选择器中删除* 之前和= 之后的空格,这样您就可以使用a[aria-label *= 'Edit Sales Order'] 而不是a[aria-label*='Edit Sales Order']

      http://try.jsoup.org/~x6PCZNOcp6NnwKPFJN-IdR5gkJk中复制、修复和测试

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-23
        • 2018-05-04
        • 1970-01-01
        • 2011-01-27
        • 1970-01-01
        • 1970-01-01
        • 2019-03-23
        相关资源
        最近更新 更多