在尝试点击网页上的“搜索”选项时,我收到了“元素不可见的异常”。该元素未被隐藏,我已经设置了time.sleep(10),因此页面有足够的时间加载。请说明为什么我会收到此错误以及如何解决此问题。
我想点击代码中的“新搜索”选项。
<a class="newsearch btn btn3d tbbtn" href="javascript:" style="position:static">
<div id="TBnewsearch"><img src="../../../../resources/images/mt_sprites.gif"
alt="New search" />
</div>
<span>New search</span>
</a>
请在下面找到我点击的代码:
time.sleep(10)
New_Search = browser.find_element_by_css_selector(' #Toolbar > table > tbody > tr > td.TBGroup.TBGroup1 > a.newsearch.btn.btn3d.tbbtn')
action2 = ActionChains(browser)
action2.move_to_element(New_Search).click()
action2.perform()
我也尝试过一个简单的查找并单击该元素,但在New_Search.click()步骤中得到相同的异常。
time.sleep(15)
New_Search = browser.find_element_by_xpath('//*[@id="Toolbar"]/table/tbody/tr/td[2]/a[1]')
New_Search.click()
我已尝试使用下面Debanjan建议的WebDriverWait,但是不满足预期条件并且我得到超时异常。
time.sleep(15)
WebDriverWait(browser, 15).until(EC.visibility_of_element_located(browser.find_element_by_xpath('//*[@id="Toolbar"]/table/tbody/tr/td[2]/a[1]')));
New_Search.click()
答案 0 :(得分:0)
您可以在开发工具中测试这些定位器,并检查它们是否指向页面上的正确元素?在控制台中使用$x()
来测试XPath,使用$$()
来测试CSS选择器。如果它返回 0 ,您知道定位器有问题。如果它返回 1 ,你很高兴。如果它返回大于1 ,您将需要验证您要查找的元素是返回的第一个元素。如果不是,您将需要制作一个新的定位器。我感觉你当前的定位器正在返回2个节点,其中第一个节点是不可见的。
尝试使用该元素祖先访问目标元素。继续向上一级,直到找到一个唯一可识别的节点,然后使用相对xpath(//
)遍历到您的元素。您也可以使用序数/索引来定位元素,但我不推荐它,因为它们会使您的测试变得脆弱。如果可能,请使用更大的HTML或应用程序URL