为什么更改我的XPATH会使我的硒点击始终如一地工作



我正在使用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]

将寻找第二个跨度。

相关内容

  • 没有找到相关文章

最新更新