我正在尝试针对该网站进行测试。 (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()
我的代码有什么问题吗?谢谢。
最佳答案
我尝试与“我的帐户”链接进行交互,该链接显示在页面导航栏的右侧部分 ( 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,它起作用了! 如果您仔细观察,我只是在您共享的定位器中添加了前面的路径,以唯一标识“我的帐户”链接。
关于Python Selenium : clicking a "visible" element using Selenium gives me an "element not visible" error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54155904/