【问题标题】:Can't find a way to click on element in Chrome webdriver - Selenium在 Chrome 网络驱动程序中找不到单击元素的方法 - Selenium
【发布时间】:2017-11-10 22:27:20
【问题描述】:

我正在尝试使用 Chrome 网络驱动程序单击一个元素,但我想不出一种方法来单击它。
我登录后显示页面,所以我无法发布网站 URL
元素的HTML代码是:

<gf-dashboard-card class="ng-scope ng-isolate-scope" href="/chat">
    <div class="card">
        <div class="card-icon"> 
            <i class="card-icon material-icons ng-
            binding">question_answer</i> 
        </div> 
        <span style="text-
        overflow:ellipsis;white-space:nowrap;overflow:hidden" 
        class="md-subhead ng-binding">Conversations</span> 
    </div> 
</gf-dashboard-card>

我尝试了任何我想不到的方法来单击元素,但我总是不断收到错误:

Message: no such element: Unable to locate element

元素的xpath是

//*[@id="dashboard-cards"]/gf-dashboard-card[1]

这给了我什么。

一个有趣的事情是在 Firefox webdriver 中我可以点击它

driver.find_element_by_class_name("ng-isolate-scope").click()

但它不适用于 Chrome。
我可以通过控制台点击元素

$('.md-subhead').click();

但还没有弄清楚如何通过 Selenium 运行它。
知道如何运行它吗?

【问题讨论】:

  • 试试driver.find_element_by_css_selector("span.md-subhead")
  • 在调试代码时,在点击前添加长时间睡眠,以查看问题是由页面未完全加载引起的。

标签: javascript jquery python google-chrome selenium


【解决方案1】:

您可能希望使用implicitly_wait 而不是time.sleep 来等待元素变为可点击。当在 10 秒超时之前找到元素时,它将继续而不是等待剩余时间。

来自文档:

隐式等待告诉 WebDriver 轮询 DOM 一定数量 不立即尝试查找任何元素(或多个元素)的时间 可用的。默认设置为 0。一旦设置,隐式等待为 为 WebDriver 对象的生命周期设置。

from selenium import webdriver

driver = webdriver.Firefox()
driver.implicitly_wait(10) # seconds
driver.find_element_by_xpath("//*[@id='dashboard-cards']/gf-dashboard-card[1]").click()

【讨论】:

  • 谢谢!使用它比使用 time.sleep 更有意义
【解决方案2】:

这是加载和等待时间的问题。
添加:

time.sleep(10)

然后:

driver.find_element_by_xpath("//*[@id='dashboard-cards']/gf-dashboard-
card[1]").click()

效果很好

【讨论】:

猜你喜欢
  • 2018-08-15
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2016-12-16
相关资源
最近更新 更多