私はPythonで一連のセレンテストを行っています。xpathを変更すると、セレンのクリックが一貫して行われるのはなぜですか?
<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をクリックしていますが、最初にそのリストを開くためにまずNAVをクリック:私は、私はこのような構造を持っているテストですページのナビゲーションを持っていますsubnav。私は私を作った、NAVをクリックした後、私は頻繁に表示されるようにsubnavスパンのを待つタイムアウトの例外を得た
//span[1]
、要素が見えるようにするのを待ち、それはXPathのだ経由して、それをクリックして、webdriverwaitを実装しますリストを開くために最初のナビゲーションをクリックして何かが間違っていたと思う。だから私は(スパン[1] //)
//li[@class='has-sub']/descendant::span[text()='First subnav']
に最初のナビゲーションのXPathを変更し、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がclick_clementが定義されているLoadCommPageのインスタンスである)の内側:
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']")
コードを共有することはできますか? – Hisagr
オリジナルの投稿に追加 –