【问题标题】:Clicking button with Selenium使用 Selenium 单击按钮
【发布时间】:2015-07-27 17:11:57
【问题描述】:

这个问题是我上一个问题的延续(可以找到here)。我现在尝试使用 Selenium 单击注销按钮的问题。继续我的上一篇文章,我正在尝试切换到一个新窗口,该窗口通过在页面中搜索注销按钮来弹出。我实际上无法让 Selenium 识别该按钮。这是我的方法:

it "can go to Ultratime", focus: true do
   @ie_driver.find_element(:link, "My Resources").click
   sleep 5
   @ie_driver.switch_to.frame(@ie_driver.find_element(:css, 'iframe[src="https://controller.nd.edu/ultratime/insidend/"]'))
   @ie_driver.find_element(:class,"single").click
   @window = @ie_driver.window_handles.detect { |w|
      @ie_driver.switch_to.window(w)
      wait.until { @ie_driver.find_element(:xpath, "//td[class='signbuts']") }
   }
   @ie_driver.switch_to.window(@window)
end

以及我尝试点击的按钮的源代码:

<table class="table" cellspacing="0" cellpadding="0" border="0">
  <tbody>
    <tr style="height:20px">
        <!--hr-->
        <td class="td">
           <button id="signbut" class="signbuts" title="" onblur="buttonBlur(this)" 
           onmouseout="buttonLeave(this)" onfocus="buttonFocus(this)" 
           onmouseover="buttonHover(this)" menuitem="ATW910" 
           onclick="signclick('W' ,'LOGOUT' ,'Logout' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'ATW' ,'910' ,'' ,'' )"></button>
        </td>
        <td class="td">
           <button id="signbut" class="signbut" title="Leave the application"
           onblur="buttonBlur(this)" onmouseout="buttonLeave(this)" 
           onfocus="buttonFocus(this)" onmouseover="buttonHover(this)" menuitem="ATW900"
           onclick="signclick('D' ,'EXITSYS' ,'Quit' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'ATW' ,'900' ,'' ,'Leave the application' )">
           </button>
        </td>
    </tr>
</tbody>

我展示了两个不同的按钮,只是为了表明我不能只查找按钮 id 标签(这会使事情变得更容易)。当我尝试运行我的脚本时出现的错误是“无法找到元素”//td[class='signbuts']“”,因此它超时了。

任何帮助将不胜感激!

【问题讨论】:

  • 在一个页面上多次使用相同的 id,通常被认为是缺陷。与开发人员聊天。
  • 我不能,它是由第三方公司开发的。我只需要用我所拥有的来弥补。看过 HTML 代码的其他人都同意,为元素使用非唯一 id 是非常愚蠢的。

标签: ruby selenium rspec


【解决方案1】:

您的示例代码没有类名 signbutstd,从您的错误中可以看出。

那个班级有一个button!但是,当按类定位元素时,您应该使用定位器“类名”。比如:

@ie_driver.find_element(:classname, "signbuts")

注意我不熟悉 Ruby,所以语法可能不正确。

【讨论】:

  • 你说得对, //td 标签完全没有任何作用。我试过使用 :class (但还没有 :class_name )无济于事。由于上一个问题由 iframe 组成,我想知道您是否与表格有什么特别的关系。我会试一试 :class_name 看看情况如何。编辑:@SiKing 将语法更改为 :class_name 没有好处。它仍然超时,因为它找不到元素(我添加了一个 30 秒的 wait.until 包装器,以防它移动得太快)。
【解决方案2】:

解决了这个问题。不知何故,当我检查页面源时,该按钮的类名是“signbuts”。当我这样做时:

puts @ie_driver.page_source

对于那个按钮,它返回一个类名“signbut”。我不知道页面源为何或如何更改,但确实如此。一旦我用新的类名运行它,它就运行得很好。

【讨论】:

    猜你喜欢
    • 2020-09-04
    • 2021-01-31
    • 2020-08-06
    • 2017-04-22
    • 2013-12-24
    • 1970-01-01
    • 2019-05-30
    • 2018-08-22
    • 2021-03-29
    相关资源
    最近更新 更多