【问题标题】:How to click on a link which contains a variable into "href" attribute?如何单击包含变量的链接进入“href”属性?
【发布时间】:2015-09-02 14:38:11
【问题描述】:

我正在使用 Selenium + WebdriverIO 编写验收测试。 我有一些问题 - 我无法点击此链接

client.click('a[href=#admin/'+ transactionId + ']')

transactionId - 它是一个包含交易 ID 的变量。 我的 HTML 代码:

 <div class="ui-data-table">
<thead>...</thead>
<tbody>
<tr><td class="tac">
  <span class="tooltip" title="Transaction"><i class="icon-transaction"></i></span>


</td>
<td class="tac no-break">Today 10:23</td>
<td class="break-all"></td>
<td class="tac">
    N/A
</td>
<td>Artem</td>
<td class="tac">
  <span class="tooltip" title="Pending">

    <i class="icon-clock"></i>


  </span>
</td>
<td class="break-all">Artem Arsenowitch</td>
<td class="tac">
    <a href="#admin/aceb3f65-4078-4f47-8850-95ac9135fad3"><i class="icon-arrow-circle-right"></i></a>
</td></tr>
<tr>...</tr>
<tr>...</tr>
<tr>...</tr>
<tr>...</tr>
<tr>...</tr>
<tr>...</tr>
</tbody>
</div>

每个“tr”标签的结构与您在上面看到的相同,并且“a”标签在 href 属性中具有适当的 id。 主要问题在于这段代码:

('a[href=#admin/'+ transactionId + ']')

因为它返回

(a[href=#admin/undefined]) 

Girish Sortur 感谢您的回答,但我发现只有一个使用此代码的解决方案:

.getAttribute("p.tac", "transaction-id")
        .then(function(attr){
          transactionId = attr;
          transactionURL = 'a[href="#admin/'+ transactionId + '"]';
        })
        .click('a[href="#admin"]')
        .waitForExist("div.ui-data-table", 10000).then(function(){
          client.click(transactionURL)//That is working now
        })

【问题讨论】:

  • 不是这门语言的专家,但可以试试 client.click('a[href="#admin/'+ transactionId + '"]')
  • 请添加您尝试单击的元素的 HTML(以及相关的周围 HTML)以及您用于获取和单击该元素的代码。
  • 似乎这个解决方案应该可以工作,但 webdriver 返回 no such element ("a[href="#admin/undefined"]") 但应该返回类似 ("a[href="#admin/"665f5344-b4e8-44e3-ab51-893dcf7bcec1""]") 的东西
  • @Arsenowitch 你能告诉我们你是如何获得transactionId 的吗?
  • .getAttribute("p.tac", "transaction-id").then(function(attr){ transactionId = attr; })

标签: javascript selenium selenium-webdriver webdriver-io webdriverjs


【解决方案1】:

仅使用 Selenium,您应该先找到元素然后单击它,因为 click() 方法不带参数。这是你可以做到的 -

driver.findElement(by.xpath('a[href="#admin/'+ transactionId + '"]')).click();

但是,如果您将 webdriver-io 与 selenium 一起使用,请确保首先生成您的 transactionId,然后单击它,因为异步 javascript 快速执行而无需等待 transaction-id 返回。方法如下-

.waitForExist("p.tac", 10000)
.getAttribute("p.tac", "transaction-id")
.then(function(attr){ 
    transactionId = attr; 
})
.click('a[href="#admin"]').waitForExist("div.ui-data-table", 10000)
.waitForVisible('a[href="#admin/'+ transactionId + '"]', 10000)
.click('a[href="#admin/'+ transactionId + '"]');

希望这会有所帮助。

【讨论】:

  • 我不知道到底出了什么问题,但它返回错误:“使用给定的搜索参数无法在页面上找到一个元素。”
  • 如果可能,您能否提供完整的错误信息?如果您也可以创建代码要点,那将会很有帮助。
  • 我只收到上述错误。在单击a[href="#admin"] 时得到的“管理表”上,我可以看到事务列表,每个事务的链接如下:&lt;a href="#admin/665f5344-b4e8-44e3-ab51-893dcf7bcec1"&gt;Details of transaction&lt;/a&gt;
  • 可能waitForVisible() 应该会帮助你。使用此代码更新答案。
  • 此代码仍然返回错误:“元素 (a[href=#admin/undefined]) 在 10000 毫秒后仍然不可见”
猜你喜欢
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-18
相关资源
最近更新 更多