无法在selenium python中单击具有链接的元素

无法在selenium python中单击具有链接的元素,python,button,selenium,hyperlink,Python,Button,Selenium,Hyperlink,我试图与注销按钮交互,但我似乎无法使用链接文本或xpath单击它 我尝试过以下这些答案,但运气不佳: 这是我的密码: from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriver

我试图与注销按钮交互,但我似乎无法使用链接文本或xpath单击它

我尝试过以下这些答案,但运气不佳:

这是我的密码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

from xatu.tests.base import login
from xatu.tests.bagon import BagonBaseTestCase


class BasicTestCase(BagonBaseTestCase):

    @login
    def test_logout(self):
        self._wait_until_id_presents("quotes-form")
        WebDriverWait(self, 10).until(
        EC.presence_of_element_located((By.XPATH, "//a[@href='/login/clear']/i")))
        self.browser.find_element_by_xpath("//a[@href='/login/clear']/i").click()
        self.implicitly_wait(2)
        self._title_check("Login")
test_logout下的第一行调用一个函数,该函数等待某个元素出现在网页上,以便我可以看到该页面已加载。然后我尝试单击注销按钮

这是HTMLelement,位于class=btn href=/login/clear:

<div class="navbar navbar-fixed-top screen-only">
    <div class="navbar-inner">
        <div class="container-fluid">
            <a class="btn btn-navbar" data-target=".nav-collapse" data-toggle="collapse">
            <a class="brand" href="/">
            <div class="nav-collapse collapse">
                <ul class="nav">
                <p class="pull-right" style="margin-top: 4px; margin-left: 4px;">
                    <a class="btn" href="/login/clear">
                        <i class="icon-off"/>
                             Sign out
                    </a>
                </p>
                <p class="navbar-text pull-right">                         Logged-in as D. V.                  Lauper                     </p>
            </div>
            <!--/.nav-collapse -->
        </div>
    </div>
</div>
编辑:我尝试了Saifur的答案并将代码更新为他的答案,但现在我得到:AttributeError:'BasicTestCase'对象没有属性'find_element'。我已尝试将self更改为self.browser作为WebDriverWait中的参数,但随后会出现原始错误。

使用显式等待和相对值

比如//a[@href='/login/clear']/i


你需要明确的等待。示例代码:

element = WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.XPATH,'//a[@href="/login/clear"]')))
然后单击元素

element.click()
注:我添加了答案b/c——至少在我的测试中——你不必担心斜体标记。这是针对文本的,而不是按钮-并且您没有单击文本。因此,查找By.XPATH并选择一个唯一的属性,即本例中的href,很可能不是类attr,然后单击您的元素

编辑:

请试试这句话:

element = WebDriverWait(self.browser, 30).until(EC.visibility_of_element_located((By.XPATH,'//a[@class="btn" and @href="/login/clear"]')))

谢谢你的回答。但是,我在运行代码时出错。AttributeError:“BasicTestCase”对象没有“find\u element”属性。我尝试将WebDriverWait中的self更改为self.browser,但我会得到原始错误。另外,我相信你遗漏了一个额外的括号。谢谢你提醒我注意。我更正了错误。而且,您应该在'webdriverwaself,10'中传递驱动程序实例,不管它是什么,请确保您也导入了正确的引用。看到了吗?你还是有例外吗?我没有例外。只是在运行代码时出现了属性错误。从Seleniu预期条件pakcage的回溯中出现了一些错误。它没有。由于该属性错误,测试停止并失败。顺便说一下,如果有帮助的话,我正在用鼻测试。谢谢你的回复。当我尝试你的方法时,我遇到了超时问题。由于某种原因,它实际上无法在30秒内找到它,这应该是足够的时间了,因为当我手动点击时,网页在大约2秒内加载。我还将driver改为self.browser,因为它是指向webdriver的变量。FireFox@AlphaFoxtrot那么,这是有效的还是需要更多的帮助?今天早上我在电脑前,我很乐意尽我所能。让我知道!更多的帮助将不胜感激!当我运行你的代码时,我会遇到超时问题。但是,我没有得到我的原始错误,现在的错误是:raise TimeoutException Message TimeoutException:Message:没有消息,因为我没有消息,但在您提供的时间内找不到元素。我在你的代码中唯一更改的是WebDriverWait中的驱动程序改为self。browserI已经根据Saifur的回答更新了我的代码,我也在和他一起努力解决这个问题。我在他的代码中遇到了与你不同的错误。@AlphaFoxtrot好的,试试他/她的东西,如果不起作用,请告诉我。我很乐意帮忙,但我相信你和赛弗能得到。让我知道!谢谢
element.click()
element = WebDriverWait(self.browser, 30).until(EC.visibility_of_element_located((By.XPATH,'//a[@class="btn" and @href="/login/clear"]')))