[英]Name of xpath not working properly in Selenium and Java
我得到了這個“編輯”按鈕,它允許我編輯網格中的特定行
那個編輯按鈕有這個:
<a class="action-menu-item" data-bind="attr: {target: $col.getTarget($action()), href: $action().href}, text: $action().label, click: $col.getActionHandler($action())" data-repeat-index="0" target="_self" href="https://randompageee/backend/company/index/edit/id/967/key/ee96a07876ee1fbef91d5d22dfjrrfkjaf9d40/">Edit</a>
它的 XPATH 是:
//*[@id="container"]/div/div[3]/table/tbody/tr[2]/td[4]/a
我在我的代碼中使用了這個:
WebElement elementProd = driver.findElement(By.xpath("//*[@id=\"container\"]/div/div[2]/div[1]/div[5]/div/div/button[2]"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();",elementProd);
問題是它有時有效,但有時無效。
XPATH 有什么問題嗎? 我應該改用其他嗎?
它有這個:
<td data-bind="css: getFieldClass($row()), click: getFieldHandler($row()), template: getBody()" class="data-grid-actions-cell">
<!-- ko if: $col.isSingle($row()._rowIndex) --><!-- ko repeat: {foreach: $col.getVisibleActions($row()._rowIndex), item: '$action'} --><a class="action-menu-item" data-bind="attr: {target: $col.getTarget($action()), href: $action().href}, text: $action().label, click: $col.getActionHandler($action())" data-repeat-index="0" target="_self" href="randomdfsd/backend/company/index/edit/id/967/key/ee96a07876ee1fbef91d5d22507d5882e9f03b78dasb24657d3ce9d40/">Edit</a><!-- /ko --><!-- /ko -->
<!-- ko if: $col.isMultiple($row()._rowIndex) --><!-- /ko -->
</td>
它的 XPATH 是:
//*[@id="container"]/div/div[3]/table/tbody/tr[2]/td[4]
另一方面,我得到了這個:
它包含:
<a class="action-menu-item" data-bind="attr: {target: $col.getTarget($action()), href: $action().href}, text: $action().label, click: $col.getActionHandler($action())" data-repeat-index="0" target="_self" href="https://randomdfsd/backend/company/index/edit/id/967/key/ee9ds1d5d22507d5882e9f03b78fca79514fab24657d3ce9d40/">Edit</a>
它的 XPATH 是:
//*[@id="container"]/div/div[3]/table/tbody/tr[2]/td[4]/a
Selenium Webdriver 識別單個 tr(行)或 td(行/列組合)的最佳方法是讓網站的開發人員(您正在測試)在動態生成表格時在這些標簽中放置一個唯一的 id 這樣如下(參見參考文獻#1)。 然后使用該 id(參見參考文獻 #2)而不是使用 XPath 獲取表格的行或單元格。 如果在 tr 或 td 下有嵌入的標簽,那么在這之后使用 XPath 是安全的,因為元素的 HTML 層次結構的起始位置是固定的(參見參考文獻 #3)。
參考#1:
<table><tr><td id="table1_row1_column1"><a>link</a></td></tr></table>
參考#2:
WebElement elementTableTd = driver.findElement(By.id("table1_row1_column1"));
參考#3:
WebElement elementTableA = driver.findElement(By.xpath("//*[@id=\"table1_row1_column1\"]/a"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.