我正在尝试点击HTML看起来像
的按钮<div class="product-details-options-size clearfix">
<p>Choose memory capacity </p>
<div class="btn-group" data-toggle="buttons">
<div class="active"> <label class="btn plain active"> <input type="radio" name="storageSize" value="32" autocomplete="off" checked="">32GB </label> </div>
<div class=""> <label class="btn plain "> <input type="radio" name="storageSize" value="128" autocomplete="off">128GB </label> </div>
</div>
</div>
btn = browser.find_elements_by_xpath("//input[@type='radio' and @name='storageSize']")
print("Storage size: ", btn[1].get_attribute('value')) #prints 128
btn[1].click()
我可以打印出按钮的值,但是当我尝试点击它时,我得到:
ElementNotVisibleException: Message: element not visible
(Session info: chrome=62.0.3202.75)
(Driver info: chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 6.3.9600 x86_64)
答案 0 :(得分:2)
因为按钮是CSS按钮。从您的HTML我们可以知道有一个Radio button
,但是从页面按钮不像单选按钮,由于css改变了按钮的外观而使其不像单选按钮。
您是否注意到单选按钮旁边有一个Lable,要更改单选按钮的外观,CSS可以将标签放在顶部以通过css:index
覆盖单选按钮。无论CSS如何做到这一点。你现在不能单击单选按钮,因为标签覆盖它,你必须点击Lable。
为什么你可以打印出按钮值,因为你按getAtttibute('value')
获得按钮值,如果你的代码改为print("Storage size: ", btn[1].text)
,它将打印空字符串。
这就像Selenium Design:
如果某个元素从用户体验中看不到,Selenium将报告 单击它时
ElementNotVisible
,并在get时返回空字符串 它的文字内容。因为sendKeys(),click(),getText()将充当用户体验。
但getAttribute()不能充当用户体验,所以不关心元素是否可见,一旦Tag具有您想要的属性,就可以获得属性值。
如上所述,您应该点击标签,因此请将代码更改为
browser.find_element_by_xpath("//label[contains(.,'128GB')]").click();