如何判断Selenium中的这两个按钮?

时间:2016-06-12 02:58:49

标签: python html selenium

我在Python上运行Selenium,我无法弄清楚如何区分这些按钮,以便我可以用Selenium点击一个。我需要点击选项1.我无法弄清楚如何从中获取任何重要的数据标记,但我对此非常陌生!

<tbody>
    <tr>
        <td>TOP1                                 </td>
        <td>11/16/15</td>
        <td>12/30/99</td>
        <td>Balance due on account</td>
        <td><button onclick="addNotify('RANDOMNUMBERS','option_1    ','Option1                                 ','IDNUMBER');">Add Alert</button></td>
    </tr>
    <tr>
        <td>TOP2                                        </td>
        <td>11/16/15</td>
        <td>12/30/99</td>
        <td>Balance due on account</td>
        <td><button onclick="addNotify('RANDOMNUMBERS','option_2   ','Option2                                        ','IDNUMBER');">Add Alert</button></td>
    </tr>
</tbody>

我需要点击&#34;添加提醒&#34;对于TOP1后面的按钮

我已经尝试了所有这些(单独)以及更多,但无法为我工作:

driver.find_element_by_xpath("//button[@title='Add Hold']").click()
driver.find_element_by_tag_name("button").click()
driver.find_element_by_xpath("//div[@class='button' and contains(text(), 'Add Alert')]").click()
driver.find_element_by_xpath("//*[@class=\"button\"]/descendant::span[text()='option_1    ']").click()

2 个答案:

答案 0 :(得分:1)

选项1,3和4不起作用,因为它们不是正确的xpath(您没有from kivy.app import App from kivy.uix.widget import Widget from kivy.uix.button import Button from kivy.core.window import Window from kivy.uix.stencilview import StencilView from kivy.graphics import Color, Ellipse, Line, Rectangle class MyPaintWidget(StencilView): def on_touch_down(self,touch): color=(0,0,1) with self.canvas: Color(*color) d=30. Ellipse(pos=(touch.x-d/2., touch.y-d/2.), size=(d,d)) class MyPaintApp(App): def build(self): parent=Widget() self.painter=MyPaintWidget(size=[i/2.0 for i in Window.size]) with self.painter.canvas: Color(1, 0, 0, 0.3) Rectangle(pos=self.painter.pos, size=self.painter.size) ssbtn=Button(text='Save') ssbtn.bind(on_release=self.save_screenshot) parent.add_widget(self.painter) parent.add_widget(ssbtn) return parent def save_screenshot(self,obj): self.painter.export_to_png("screenshot.png") MyPaintApp().run() 属性,title不是类,button不是按钮文本的一部分);选项2将返回第一个元素,因此它应该适用于页面上的第一个按钮,但通常最好更具体。

如果按钮的文字不同(它不在你的HTML代码上,但我不确定它不是拼写错误),那么使用:

option_1

否则使用

//button[contains(text(),'Add Alert')]

如果在//button[contains(@onclick,'option_1')] 中使用这两个xpath时都失败了:

find

然后你需要检查两件事:

  1. 这个表单是否属于某种iframe?如果是,您需要switch to iframe才能找到它

  2. 也可能是该按钮没有立即显示,您需要wait

    driver.find_element_by_xpath(...).click()
    

答案 1 :(得分:1)

你尝试的那些与标记中的内容不匹配,首先你需要为你的按钮添加类,如果你要yung @class。

但是你还在做什么是错的,如果这个表是动态的,你需要使用List来获取表的行。首先为表格行和按钮添加类:

<!-- Add class to your <tr> -->
<tr class="rows">
<!-- and class to you <button> -->
<button class="button" onclick="addNotify('RANDOMNUMBERS','option_1    ','Option1                                 ','IDNUMBER');">Add Alert</button>

使用:

List<WebElement> buttons = driver.findElements(By.cssSelector(".rows"));
//Since you wanted the first button after TOP 1 use get index 0 (get(0))
buttons.get(0).findElement(By.xpath("//button[@class='button']")).click();