无法在python中使用webdriver单击元素

时间:2015-08-05 21:14:58

标签: python selenium xpath selenium-webdriver webdriver

我需要帮助,在python中使用selenium webdriver点击一个元素。

这是html代码供参考: 我试图点击一个名为“SYSTEM”的元素

<body>
<div id="toparea">
<div id="logo" style="top: 10px; z-index: 3">
<div id="welcome">
<div id="topmenu1">
<ul>
<li id="home" class="selected" style="right: 636px">
<li id="incidents" style="right: 530px">
<li id="case" style="right: 424px">
<li id="capture" style="right: 318px">
<li id="policies" style="right: 212px">
<li id="classify" style="right: 106px">
<li id="system" style="right: 0px">
<a onclick="location.href='/imanager/ReShowMenuBar.do?selectedtab=system'" title="SYSTEM" target="mainFrame" href="/devicemgr/ReSystemAdministration.do">SYSTEM</a>
</li>
</ul>

我尝试使用:

driver.find_element_by_xpath("//*[@id='system']/a")

尝试使用link_text,id查找元素,但都是徒劳的。

我也不确定我的xpath是否正确,我正在努力学习。

3 个答案:

答案 0 :(得分:4)

通过链接文字找到

driver.find_element_by_link_text("SYSTEM")

您可能还需要wait for the element to be clickable

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
system = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "SYSTEM")))
system.click()

答案 1 :(得分:0)

使用selenium和python可以通过多种方式定位元素。在您的情况下,您可能会使用 find_element_by_css_selector find_element_by_xpath ,您的HTML代码缩进有点难以阅读,所以我假设正文包含everthing和 ul 下面的所有 li 。 我使用Chrome作为我的示例,如果您使用的是Firefox,它本身就受到Selenium的支持,这意味着您不需要像我在Chrome下面那样提供Firefox路径。

chrome = webdriver.Chrome('PathToChromeDriver.exe')
element = chrome.find_element_by_xpath("//body//ul//li[@id='system']")

或者,您可以通过在ui下询问第7个li元素来找到您的元素,这次,我在我的示例中使用了Firefox。

firefox = webdriver.Firefox()
element = firefox.find_element_by_xpath("//body//ul//li[7]")

我个人最喜欢的定位元素的方法是通过css选择器:

firefox = webdriver.Firefox()
element = firefox.find_element_by_css_selector("li[id='system']")

如果您有两个共享相同ID的元素,例如id ='system',您可以使用css选择器来精确选择元素,例如:

firefox = webdriver.Firefox()
element = firefox.find_element_by_css_selector("li[id='system'][style='right: 0px']")

基本上,您可以根据需要添加尽可能多的属性来唯一定位元素:

firefox = webdriver.Firefox()
element = firefox.find_element_by_css_selector("li[id='system'][style='right: 0px'][attribute3 = 'value'][attribute4 = 'value']")

以下是您可能会发现有用的两个链接: http://www.w3schools.com/xsl/xpath_syntax.asp http://www.w3schools.com/cssref/css_selectors.asp

答案 2 :(得分:0)

请尝试:

driver = webdriver.Firefox();

driver.findElement(By.id("SYSTEM")).click();