我正在使用Python进行一系列硒测试。我正在测试的页面上有一个导航,该导航具有此结构:
<ul>
<li class="has-sub">
<a href="#">
<span> First nav </span>
</a>
<ul style="display:block">
<li>
<a href="#">
<span> First subnav </span>
</a>
</li>
<li>...</li>
<li>...</li>
<li>...</li>
</ul>
</li>
<li>...</li>
</ul>
现在,我要单击第一个subnav,这是第一个跨度,但是单击第一个导航以打开该列表,然后单击第一个subnav。我实现了一个WebDriverWait,以等待可见元素,然后通过其XPATH单击它,
//span[1]
我经常在单击导航后获得超时例外,等待subnav跨度可见,这使我认为单击第一个导航以打开列表时有问题。因此,我将第一个NAV(//span [1])的XPath更改为
//li[@class='has-sub']/descendant::span[text()='First subnav']
现在,等待subnav跨度现在可见时,我再也没有暂停例外了。因此,似乎每次都总是单击导航范围以将其打开,并在尝试到达SubNav时没有超时。有人知道为什么是吗?
这也是我的Python代码:
内部loadCommpage类:
def click_element(self, by, locator):
try:
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located((by, locator)))
print "pressing element " + str(locator)
self.driver.find_element(by, locator).click()
except TimeoutException:
print "no clickable element in 10 sec"
print self.traceback.format_exc()
self.driver.close()
在主测试内部(load_comm_page是LoadCommpage的一个实例,其中定义了Click_clement):
load_comm_page.click_element(*LoadCommPageLocators.sys_ops_tab)
和另一个用于定位者的课程:
class LoadCommPageLocators(object):
firstnav_tab = (By.XPATH, "//li[@class='has-sub']/descendant::span[text()='First nav']")
xpath索引以一个开始,而不是0,所以xpath
//span[1]
正在寻找HTML中的第一个跨度元素。而
//span[2]
将寻找第二个跨度。