如何单击文本为“编辑”的元素?

时间:2019-09-20 03:18:31

标签: java selenium xpath css-selectors webdriverwait

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

MyTestProject
     -----MyTest
            ----Bug

我的代码:

<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>

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

我的CSS选择器肯定有问题,但我无法弄清楚。

让我知道我是否应该包括错误代码,更多信息,或者我在帖子中做错了什么。 谢谢!

编辑:aria标签也发生了变化,HTML上的位置也发生了变化,因此我不能使用xpath。以下DebanJanB的答案会单击该元素,但仅当我手动将鼠标悬停在该元素上时。

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

4 个答案:

答案 0 :(得分:0)

您可以使用 class =“ uir-item-edit” 。在CSS选择器中,您必须使用整个值,例如:编辑销售订单:300000/400000 。试试这个

答案 1 :(得分:0)

我可以为您解决,我知道您正在寻找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(“ // * [包含(text(),'编辑')]”“)))。click();

是的,请分享更多有关错误的信息,祝您好运

答案 2 :(得分:0)

要对文本为编辑的元素进行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();
    

答案 3 :(得分:0)

*之前和=之后,从CSS选择器中删除空格,这样您将拥有a[aria-label *= 'Edit Sales Order']而不是a[aria-label*='Edit Sales Order']

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