如何单击带有文本的元素作为编辑?
How to click on the element with text as Edit?
我正在尝试使用 Selenium WebDriver 单击具有以下 HTML 代码的按钮:
<a class="uir-item-edit" href="/app/accounting/transactions/transaction.nl?id=400000&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 选择器一定有问题,但我想不通。
让我知道我是否应该包括错误代码、更多信息,或者我是否使用 post 做了一些不正确的事情。
谢谢!
编辑: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();
您可以使用class="uir-item-edit"。在 CSS 选择器中,您必须使用整个值,例如:Edit Sales Order:300000 / 400000。试试这个
我可以给你解决方法,我知道你正在寻找 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='Edit Sales Order:300000 / 400000']")).click();
driver.findElement(By.xpath("//*[包含(text(),'Edit')]")).click();
是的,请分享更多错误信息,祝你好运
To click()
在文本为 Edit 的元素上,您需要使用 elementToBeClickable()
并且可以使用以下任一项 :
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();
从 CSS 选择器中删除 *
之前和 =
之后的空格,这样 a[aria-label *= 'Edit Sales Order']
就会变成 a[aria-label*='Edit Sales Order']
中转载、修复和测试
我正在尝试使用 Selenium WebDriver 单击具有以下 HTML 代码的按钮:
<a class="uir-item-edit" href="/app/accounting/transactions/transaction.nl?id=400000&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 选择器一定有问题,但我想不通。
让我知道我是否应该包括错误代码、更多信息,或者我是否使用 post 做了一些不正确的事情。 谢谢!
编辑: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();
您可以使用class="uir-item-edit"。在 CSS 选择器中,您必须使用整个值,例如:Edit Sales Order:300000 / 400000。试试这个
我可以给你解决方法,我知道你正在寻找 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='Edit Sales Order:300000 / 400000']")).click();
driver.findElement(By.xpath("//*[包含(text(),'Edit')]")).click();
是的,请分享更多错误信息,祝你好运
To click()
在文本为 Edit 的元素上,您需要使用 elementToBeClickable()
并且可以使用以下任一项
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();
从 CSS 选择器中删除 *
之前和 =
之后的空格,这样 a[aria-label *= 'Edit Sales Order']
就会变成 a[aria-label*='Edit Sales Order']