Python Selenium:使用Selenium单击“可见”元素会给我“元素不可见”错误

时间:2019-01-12 01:03:09

标签: python selenium selenium-webdriver

我正在尝试对该网站进行测试。 (https://www.phptravels.net/),并且我想测试其登录功能。有一个“我的帐户”链接,需要首先单击该链接以显示“登录和注册”按钮的下拉菜单。 HTML代码是这样的:

<li id="li_myaccount" class="">
    <a href="javascript:void(0);" data-toggle="dropdown" class="dropdown-toggle go-text-right" aria-expanded="false"><span class="ink animate" style="height: 137px; width: 137px; top: -10.7969px; left: -28.7344px;"></span><i class="icon_set_1_icon-70 go-right"></i> My Account <b class="lightcaret mt-2 go-left"></b></a>
    <ul class="dropdown-menu">
        <li><a class="go-text-right" href="https://www.phptravels.net/login"> Login</a></li>
        <li><a class="go-text-right" href="https://www.phptravels.net/register">  Sign Up</a></li>
    </ul>
</li>

当我尝试单击“我的帐户”按钮时,它抛出一条错误消息,提示“元素不可见”。我很困惑,因为显然这个按钮一直都可见。这是代码:

elem = driver.find_element_by_xpath("//*[@id='li_myaccount']/a")
elem.click()

我的代码有什么问题?谢谢。

2 个答案:

答案 0 :(得分:1)

我试图与“我的帐户”链接进行交互,该链接显示在页面(https://www.phptravels.net/)上导航栏的右侧。尝试单击链接时使用定位器//*[@id='li_myaccount']/a,使用Webdriver,出现以下错误:

ElementNotVisibleException: Message: element not interactable

当我使用Chrome的控制台浏览html并使用定位符//*[@id='li_myaccount']/a搜索元素时,要单击的“我的帐户链接”没有突出显示。

因此,经过进一步的探索,我选择了突出显示“我的帐户”链接的定位器//*[contains(@class,'navbar-nav navbar-right')]//*[@id='li_myaccount']/a

然后,使用Webdriver驱动程序,使用新的定位器单击“我的帐户”链接,它可以正常工作! 如果您仔细注意,我只是在您共享的定位器中添加了前面的路径,以唯一地标识“我的帐户”链接。

Click My Account Link

答案 1 :(得分:-1)

将xpath更改为此:

(//*[@id='li_myaccount']/a)[2]

如果您查看源代码,实际上有2个元素与此定位符匹配-当前模式中某个模式中的<a>标签和您正在尝试解决的一个元素;因此,您遇到的问题是,该方法将返回第一个,而不是所需的。

此xpath将从响应集(围绕查找值的[2])中返回第二个元素(())。