我一直在尝试在网页上查找一个元素,该元素与其他元素同名,没有id。它确实有不同的值,因此我希望通过名称和值查找该元素。
在我的网页我有一个搜索按钮:
<input name="action" value=" Search " style=" border-style2; font-size: 11;
font-family: arial, helvetica" border="0" type="submit">
我不能使用name,因为我有另一个具有相同名称和类型的元素:
<input name="action" value=" Go " onclick=" return custRange('cust', 'd_custno');"
style=" border-style2; font-size: 11; font-family: arial, helvetica"
border="0" type="submit">
因此,我尝试使用xpath,我开始使用xpath检查器返回返回的xpath:
/x:html/x:body/x:center/x:table/x:tbody/x:tr/x:td/x:center/x:center[1]/x:table[2]/x:tbody/x:tr/x:td[1]/x:table[3]/x:tbody/x:tr[5]/x:td[2]/x:input[2]
这又是一个非常新的,但我假设“x:”不应该在路径中,所以我删除了这个,并试图找到以下元素:
search = driver.find_element_by_xpath("//center[1]/table[2]/tbody/tr/td[1]/table[3]/tbody/tr[5]/td[2]/input[2]")
search.clickAndWait()
这导致:
selenium.common.exceptions.NoSuchElementException: Message: 'Unable to find element with xpath == //center[1]/table[2]/tbody/tr/td[1]/table[3]/tbody/tr[5]/td[2]/input[2]'
所以我真的有两个问题,如果有人能帮忙,那就太好了:
任何帮助非常感谢。
为完整起见,我的unittest代码如下:
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
class umLoginTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Ie()
self.driver.implicitly_wait(3)
def test_login_to_um(self):
driver = self.driver
result_file = open("umLoginTest_result.txt", "w")
driver.get("http://ps-iweb/UserManage/Home")
self.assertIn("Welcome", driver.title)
elem = driver.find_element_by_name("userLogin")
elem.send_keys("pstevenson")
password = driver.find_element_by_name("sec_password")
password.send_keys("etc")
password.send_keys(Keys.RETURN)
test1 = driver.title
result_file.write(str(test1))
select = driver.find_element_by_name("conn_marketid")
for option in select.find_elements_by_tag_name('option'):
if option.text == 'Int Rate Swaps':
option.click()
search = driver.find_element_by_xpath("//center[1]/table[2]/tbody/tr/td[1]/table[3]/tbody/tr[5]/td[2]/input[2]")
search.clickAndWait()
result_file.close()
if __name__ == "__main__":
unittest.main()
下面是Java代码,我用上面指定的2个控件尝试了它。
driver= new FirefoxDriver();
driver.get("file:///D:/Programming%20Samples/Input.html");
driver.findElement(By.xpath("//*[@name='action'][@value='Go']")).click();
driver.findElement(By.xpath("//*[@name='action'][@value='Search']")).click(); //observed here in your HTML i see some spaces. Make sure giving the right value.
希望以上有所帮助。
回答你的问题,,
1-是的,你可以,
driver.find_element_by_name(‘foo’)
http://selenium-python.readthedocs.org/en/latest/api.html#selenium.webdriver.remote.webdriver.WebDriver.find_element_by_name
2-我总是尽量避免使用xpath,因为有时候它不能正常工作。相反,您应该始终尝试按名称或id查找。。我认为这是最好的情况。
试试这个
//input[@name='action' and @value=' Search ']
问题内容: 我想识别该网络元素。它仅定义了这两个类。我不能执行以下操作,因为不使用空格分隔的值。什么是替代品? 问题答案: 我认为巴拉克·马诺斯的答案不能完全解释这一点。 想象一下,我们只有以下几个元素: XPath如何匹配 只匹配1个(完全匹配),巴拉克的答案 比赛1,比赛2和比赛3(比赛类别包含,课程顺序很重要) 匹配1、2、3和4(只要元素具有class 和) 同样,在这种情况下,Css S
问题内容: 我使用上面的python代码来练习一些基本的Selenium操作。我找不到任何元素,无论是名称还是ID。不管我尝试什么,我总是会遇到相同的错误,这表明我要查找的元素不存在。(想法是按一下其中一个按钮…) 这是网站html代码的一部分: 这是所说的网站(链接断开) 任何帮助将不胜感激。 顺便说一句,这是我尝试运行的第一个使用Selenium的程序,是否有可能需要更改某些设置或需要安装其他
问题内容: 以下定位技术之间有什么区别? 而且,从 性能角度来看 ,哪种方法是通过id定位元素的最快方法? 问题答案: 您的问题很难回答,肯定会给出一个结论性的答案。实际上,我很想将此问题标记为“太宽泛”,其他答案和评论也支持该问题。 以您的为例。纵观Selenium来源, 大多数 驱动程序只是获取您提供的ID,然后将其传递给有线协议: 如您所知,每个浏览器供应商都在单独的二进制文件中实现自己的有
请帮助我,我正在尝试选择一个图片,这是一个链接(一个网站上的培训师) 这是我的代码:
我还尝试使用CSSSelector: 但WebDriver不断抛出一个异常,说明它无法找到该元素。有什么建议可以是什么问题吗?
问题内容: 我有一些如下所示的元素: 如何向属性值为(零)的元素添加类? 我尝试了许多不同的解决方案,但没有任何效果。一个例子: 任何的想法? 问题答案: 使用属性等于选择器 它在树上起作用 获取当前匹配元素集中每个元素的后代,并通过选择器,jQuery对象或元素进行过滤。