为什么硒会改变元素的href?

时间:2015-02-05 08:26:11

标签: javascript jquery selenium

我正在使用selenium检查网页元素,然后获取其"href"

driver.findElement(getSelectorForButton(name)).getAttribute("href")

为什么我得到的结果是...current url...#,而不是我在浏览器控制台中看到的jut #

<a class="action-btn big-button btn-phone take-button v3" data-model="{&quot;analytics_url&quot;:&quot;/coupons/use?action_source=popup&amp;cookie=..uot;],&quot;redirect_url&quot;:null}" href="#">
    <div class="btn-text">
        <span>Call Now</span>
    </div>
</a>

2 个答案:

答案 0 :(得分:0)

我可能错了,但我认为这是因为

driver.findElement(getSelectorForButton(name));

不返回DOM元素,但使用getAttribute参数调用('href')属性(方法)的selenium包装器不返回href 属性内容,但href 属性内容。

浏览器会自动填充href属性,并为href中的每个相对/绝对路径提供匹配的前缀。

以下示例:

HTML:

<a href="#" id="link1">Test</a>
<a href="./uri" id="link2">Test</a>
<a href="/uri" id="link3">Test</a>

JavaScript的:

var a = document.getElementById('link1');
console.log(a.href); // '...Whatever_your_url_is...#'
console.log(a.getAttribute('href')); // '#'

var b = document.getElementById('link2');
console.log(b.href); // '...Whatever_your_url_is.../uri'
console.log(b.getAttribute('href')); // '/uri'

var c = document.getElementById('link3');
console.log(c.href); // '...Whatever_your_domain_and_port_is.../uri'
console.log(c.getAttribute('href')); // './uri'

DEMO:http://jsfiddle.net/j8t470uk/

答案 1 :(得分:0)

原因是(根据文档)

  

此方法将返回给定属性的值,除非该属性不存在,在这种情况下返回具有相同名称的属性的值(例如,对于&#34; value&#34;属性textarea元素)。如果两个值均未设置,则返回null。

getAttribute首先在 DOM 中查找属性,如果你可以看到href包含完整的网址。

例如:如果您检查有效标签,您会看到 href =&#34; / questions / 28339297 / why-does-selenium-change-the-elements-href?answertab = active#tab-top&#34; ,但是如果你看看那里的DOM,你会发现这个href附加到<强> http://stackoerflow.com