gpt4 book ai didi

python - 为什么更改我的 xpath 可以让我的 selenium click 始终如一地工作?

转载 作者:太空宇宙 更新时间:2023-11-03 15:50:24 25 4
gpt4 key购买 nike

我正在使用 python 运行一系列 Selenium 测试。我正在测试的页面上有一个具有以下结构的导航:

<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>

现在,我单击第一个子导航,即第一个跨度,但单击“第一个导航”打开该列表,然后单击第一个子导航。我实现了一个 webdriverwait,等待元素可见并通过它的 xpath 单击它,

//span[1]

在单击导航后等待子导航跨度可见时,我经常遇到超时异常,这让我认为单击第一个导航打开列表时出现了问题。所以我将第一个导航的 xpath (//span[1]) 更改为

//li[@class='has-sub']/descendant::span[text()='First 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 索引从 1 开始,而不是 0,因此 Xpath

//span[1]

正在寻找 html 中的第一个 span 元素。鉴于

//span[2]

将寻找第二个跨度。

关于python - 为什么更改我的 xpath 可以让我的 selenium click 始终如一地工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41367055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com