【问题标题】:Error : Message-Element is not currently visible and so may not be interacted with错误:消息元素当前不可见,因此可能无法与之交互
【发布时间】:2016-02-22 11:23:29
【问题描述】:

我正在编写脚本以使用 selenium 将我的 ssh 密钥添加到 bitbucket 的部署密钥。直到行

driver.find_element_by_id('add-key').click()

工作正常,但是当弹出窗口时,我想在特定字段中输入密钥

driver.find_element_by_name('key').send_keys('testing key added')

它会抛出这个错误 元素当前不可见,因此可能无法与之交互。我在谷歌上搜索过这个。我知道首先我需要转到这个弹出窗口,然后我才能将值传递给相应的元素。我不知道该怎么做。

请帮助我如何专注于新的弹出窗口。 我也使用了 time.sleep(10) 但它仍然对我不起作用。

【问题讨论】:

  • 您是否在单击“添加密钥”按钮后检查了放置等待或睡眠?
  • 是的,我使用了 time.sleep(10) 但它对我不起作用
  • 我已经发布了一个答案,请验证。

标签: python selenium


【解决方案1】:

问题是driver.find_element_by_name('key').send_keys('testing key added') 给出了元素列表。所以脚本需要识别文本区域的唯一元素。

解决方案:xpath:(//textarea[@name='key'])[2]

driver.find_element_by_xpath("(//textarea[@name='key'])[2]").send_keys('testing key added')`

希望您找到解决方案。

注意:如果您随机收到错误,请等待或休眠。这导致元素不可见的可能性最小化(根本原因:页面未正确加载。)

【讨论】:

  • 抛出错误 driver.find_element_by_xpath('//textarea[@name="key"]')[2].send_keys('key added') TypeError: 'WebElement' object does not support索引
  • driver.find_element_by_xpath("(//textarea[@name='key'])[2]") 使用这个
  • 对此我还有一个疑问。我有 但使用 driver.find_element_by_xpath('(//button[contains(text()),"Add key")]').click() 不起作用。你能帮忙吗
【解决方案2】:

首先,您需要确定存在的窗口列表,因为在您的情况下有两个窗口, 父母和新的一个孩子。因此,通过指定子窗口的名称将控件移动到子窗口。(用于验证您是否在子窗口上 移动到子窗口后添加 getTitle() 方法) 只要控制在子窗口上移动,您就可以输入 SSH 密钥的值。(下面的代码是在 java 中)

// get  window ids of all windows 
 Set<String> windowId = driver.getWindowHandles();    
        Iterator<String> itererator = windowId.iterator();   

        String parentWindow = itererator.next();
        String  childWindow = itererator.next();

        driver.switchTo().window(childWindow);
        //Enter the value for ssh key,Save and close the child window.

        driver.switchTo().window(parentWindow); // now swicth back to the Parent WINDOW.
        Thread.sleep(2000);

希望这对你有用.. :)

【讨论】:

  • 这看起来不错,但我不知道这段代码的 Java 到 Python 转换
【解决方案3】:

我认为您不需要关注那个弹出窗口,请使用 Xpath 方法 (find_element_by_xpath) 指向该元素。

【讨论】:

  • 您能否尝试通过“id”而不是“name”来获取该元素。 IE; driver.find_element_by_id('key').send_keys('testing key added')
  • 我已经通过 id 尝试过,但它需要先聚焦元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-13
  • 2016-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多