我在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()
答案 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
然后你需要检查两件事:
这个表单是否属于某种iframe?如果是,您需要switch to iframe才能找到它
也可能是该按钮没有立即显示,您需要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();